C/Visual C - Punteros en c++

 
Vista:

Punteros en c++

Publicado por Jorge (1 intervención) el 02/04/2007 13:24:57
Hola a todos, soy nuevo en esto de la programación con c, estoy programando en borland c++ builder. Tengo una pregunta, estoy modificando un programilla que había hecho que tiene una variable creada de esta forma:

short int* ventanaitem;
ventanaitem =( short int*) malloc((Tam_buffer/Alineacion)*sizeof(short int));

y ahora necesito crear un array de variables de ese estilo. ¿podríais decirme como se hace? a mi se me ha ocurrido lo siguiente:

short int** ventanaitem;
ventanaitem =( short int**) malloc((Tam_buffer/Alineacion)*sizeof( short int));

y luego:

for (int i=0; i<elementos; i++)
{
ventanaitem[i] = ( short int*) malloc(( ( short int) (Tam_buffer/Alineacion))*sizeof( short int));
}

Yo lo he intentado así, pero resulta que me da un error de acceso ilegal a memoria en ciertos casos... ¿he hecho algo mal?

Si pudierais ayudarme os lo agradecería enormemente.

Gracias y saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Punteros en c++

Publicado por Nelek (816 intervenciones) el 02/04/2007 15:30:04
Hola,

no estoy seguro, pero si ahora estas creando un vector de dichas variables... al reservar el espacio... no deberias especificar el tamanyo del puntero de la variable en lugar de volver a asignar los short int de antes?

Me explico:

short int* ventanaitem;
ventanaitem =( short int*) malloc((Tam_buffer/Alineacion)*sizeof(short int));
---------

short int** ventanaitem;
ventanaitem =( short int**) malloc((Tam_buffer/Alineacion)*sizeof( short int));

for (int i=0; i<elementos; i++)
{
ventanaitem[i] = ( short int*) malloc(( (short int*) sizeof( ventanaitem)); //AQUI ES DONDE DIGO YO
}

------
No estoy seguro de la correcion de lo que te he dicho, yo mismo tengo problemas aun con los punteros, pero prueba a ver.

Y por otro lado... te aconsejaria usar typedefs... ayudan bastante a no rallarse con tanto asterisco ;)

typedef short int* Ventana;
Ventana ventanaitem;
ventanaitem = malloc...

Ventana* ventanaArray;
for (int i = 0; i < elementos; i++)
ventanaArray[i] = malloc...

Asi ya tienes mas estructurado la cosa y queda mas claro, porque el nombre que has definido para esa variable ya tiene el puntero dentro de su definicion por lo que, cuando quieras declarar un puntero a esa variable, solo hace falta anyadir otra estrella como si fuera un objeto normal y corriente.

for (int i = 0; i <
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros en c++

Publicado por Eduardo Negrete (76 intervenciones) el 02/04/2007 18:44:05
Prueba con esto

short int **ventanaitem;
ventanaitem = ( short int**) malloc((Tam_buffer/Alineacion)*sizeof( short int *));

y luego:

for (int i=0; i<elementos; i++)
{
ventanaitem[i] = ( short int*) malloc((Tam_buffer/Alineacion)*sizeof( short int));
}

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros en c++

Publicado por Jorge (2 intervenciones) el 03/04/2007 11:29:30
Hey!!! Muchas gracias, al final era como yo lo tenía, sólamente que cuando creaba
ventanaitem = ( short int**) malloc((Tam_buffer/Alineacion)*sizeof( short int )); pues tenía que incluir también el número de elementos que iban a estar :P vuestros ejemplos me ayudaron a verlo, muchísimas gracias a todos :-) por si interesa la forma en la que funciona es
ventanaitem =( short int**) malloc((elementos*(Tam_buffer/Alineacion))*sizeof(short int)); y lo demás igual que como lo tenía.

Muchas gracias a todos.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Punteros en c++

Publicado por Jorge (2 intervenciones) el 03/04/2007 11:35:05
Hey!!! Muchas gracias, al final era como yo lo tenía, sólamente que cuando creaba
ventanaitem = ( short int**) malloc((Tam_buffer/Alineacion)*sizeof( short int )); pues tenía que incluir también el número de elementos que iban a estar :P vuestros ejemplos me ayudaron a verlo, muchísimas gracias a todos :-) por si interesa la forma en la que funciona es
ventanaitem =( short int**) malloc((elementos*(Tam_buffer/Alineacion))*sizeof(short int)); y lo demás igual que como lo tenía.

Muchas gracias a todos.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar