Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Punteros

Iniciado por vincent, 20 de Mayo de 2005, 09:00:27 AM

« anterior - próximo »

vincent

 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!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Haddd

 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.

samsaga2

 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.

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!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

fiero

 Tambien puedes hacer la suma sin abreviaturas:


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


un saludo
www.videopanoramas.com Videopanoramas 3D player

samsaga2

 
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.

zupervaca

 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

Grugnorr

 
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 :)
hat the hells!

shephiroth

 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 ^^






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.