Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: vincent en 20 de Mayo de 2005, 09:00:27 AM

Título: Punteros
Publicado por: vincent en 20 de Mayo de 2005, 09:00:27 AM
 Muy buenas,

tengo un problemilla con los void*.

Resulta que si yo hago:


char* pp;
pp = ( char* ) malloc (sizeof(char) + 55);
(char*) pp += 5;


esto no da ningún error...

pero si hago

void* pp;
pp = ( char* ) malloc (sizeof(char) + 55);
(char*) pp += 5;


Me da el siguiente error: error C2106: '+=' : left operand must be l-value

A que puede ser debido? Como lo puedo solucionar?

Gracias!
Título: Punteros
Publicado por: Haddd en 20 de Mayo de 2005, 09:10:50 AM
 te está haciendo primero la suma y después el cast, por eso te da error.

¿Para que quieres hacer esto? Iguálalo a un char y ya está. La programación donde se "ahorraban" variables ha pasado a la historia ya hace tiempo. Ahora se estila, y se necesita por su complejidad, la claridad.
Título: Punteros
Publicado por: samsaga2 en 20 de Mayo de 2005, 09:34:26 AM
 Como bien dice Hadd esta haciendo cast despues de hacer la suma. El compilador se queja que estas intentado cambiar la direccion del puntero a una variable que no tiene tipo y asi es imposible averiguar que tiene que sumar si cinco bytes, cinco words o lo que sea.
Título: Punteros
Publicado por: vincent en 20 de Mayo de 2005, 11:24:17 AM
 ya, la putada es que estoy adaptando un programa muy antinguo que tenemos en la empresa...

al final he echo esto, que no sé si es correcto....

UCHAR* pp = (UCHAR*)el_item;
pp += sizeof( UCHAR );
(void*)el_item = (void*)pp;


Gracias!
Título: Punteros
Publicado por: fiero en 20 de Mayo de 2005, 11:44:54 AM
 Tambien puedes hacer la suma sin abreviaturas:


void* pp;
pp = ( char* ) malloc (sizeof(char) + 55);
pp = (char*)pp +5;


un saludo
Título: Punteros
Publicado por: samsaga2 en 20 de Mayo de 2005, 12:33:53 PM
 
Cita de: "vincent"ya, la putada es que estoy adaptando un programa muy antinguo que tenemos en la empresa...

al final he echo esto, que no sé si es correcto....

UCHAR* pp = (UCHAR*)el_item;
pp += sizeof( UCHAR );
(void*)el_item = (void*)pp;


Gracias!
Creo que te estas liando si UCHAR es un byte el codigo va bien pero como sean dos bytes (o mas) sumara el doble de lo que toca.

Aqui la cuestion es... ¿que es pp? Un array de bytes? ¿un array de caracters en ASCII? El puntero a void* va bien cuando es un array a algo desconocido y se suele usar en funciones genericas. Por ejemplo malloc ratorna un puntero void* porque no sabe lo que quieres si un array de bytes o lo que sea.

Una pregunta... ¿es un programa para una empresa (entiendo que hecho por profesionales) y como nombre de varoables le pones pp?  :blink: A no ser que sea ironia y se refiera a que sea una variable con ideologia de la ultraderecha.
Título: Punteros
Publicado por: zupervaca en 20 de Mayo de 2005, 01:17:11 PM
 como dice haddd explayate con el codigo, no intentes ahorrar dos lineas, ademas ponerse a depurar eso es una locura  ;)

saludos

pd: samsaga2 no lo digo por liar las cosas pero mejor dejemos la politica de lado ya que hay gente que se puede ofender al ver que juntas "ultraderecha" con "pp", como otros se ofenderian viendo "eta" y "psoe", vale mas olvidar este ultimo comentario de samsaga2 para no empezar los flames que fijo que lo puso sin querer
Título: Punteros
Publicado por: Grugnorr en 20 de Mayo de 2005, 03:48:49 PM
 
CitarUna pregunta... ¿es un programa para una empresa (entiendo que hecho por profesionales) y como nombre de varoables le pones pp?  A no ser que sea ironia y se refiera a que sea una variable con ideologia de la ultraderecha.

Deberías ver mucho código profesional... o el del Quake :)
Título: Punteros
Publicado por: shephiroth en 23 de Mayo de 2005, 01:51:22 AM
 Wenas.

Solo queria aclarar que aunque no te da un fallo sintactico tienes un fallo en el codigo que pusiste...no es lo mismo

(sizeof(char) + 55);

que

(sizeof(char) * 55);

El compilador no se queja pq no es fallo sintactico, pero ten cuidado q luego te puede dar problemas de que no puede escribir en una memoria q no tiene reservada.

SALUDOS ^^