2012-02-17 19 views
5
int (*p)[2]; 
p=(int(*))malloc(sizeof(int[2])*100); 

¿Cuál es la forma correcta de malloc un puntero a una matriz? No puedo entender la pieza con (int (*))puntero malloc a la matriz

+2

En C '(int (*))' debe evitarse. Se sugiere que no arroje el valor de retorno de 'malloc'. –

+0

oh wow no hay más errores de compilación, gracias – titus

+1

Y si realmente quieres lanzar, debería ser '(int (*) [2])'. '(int (*))' es 'int *'. El tamaño pasó a 'malloc' se ve bien (asignando un tamaño de 100 punteros a una matriz de 2 ints) –

Respuesta

8

comentarios envíos como respuesta:
En C no se deben a emitir el valor de retorno de malloc. Consulte this post en SO para obtener más información sobre por qué el valor de retorno de 0 de typecasting malloc no es una buena idea en C. Y si por alguna razón realmente quieres lanzar, debería ser (int(*)[2]). (int(*)) es int *. El tamaño pasado a malloc se ve bien (asignando un tamaño de 100 punteros a una matriz de 2 ints). Entonces usted debe estar haciendo

int (*p)[2]; 
p=malloc(sizeof(int[2])*100); 

Espero que esto ayude!

-1

No está claro lo que quiere aquí. Si quiere 100 pares int, por ejemplo, organizados como una matriz de punteros a int (donde cada puntero apunta exactamente a dos ints), entonces necesita llamar malloc 100 veces en 100 punteros a int, asignando dos enteros cada vez.

Simplemente no tiene sentido "malloc un puntero a una matriz". Puede malloc una matriz, y asignar esa dirección a un puntero, o puede malloc una matriz de punteros. Pero lo que has preguntado no está claro.

+1

bien, pero ¿y si no sé que necesito 100 punteros en tiempo de ejecución? ¿y si necesito 10000? Creo que lo estoy haciendo bien. – titus

+2

Creo que está bastante claro qué necesita el OP aquí. –

Cuestiones relacionadas