¿Cuál es la forma correcta de inicializar un puntero doble en C?
Como título, quiero saber cómo inicializar un puntero doble con sizeof
de un puntero.
Por ejemplo:
int **p = malloc(sizeof *p * rows);
for(size_t i = 0; i < rows; i++){
p[i] = malloc(sizeof ? * cols);
}
¿Qué debería llenar en ?
.
Cualquier ayuda sería apreciada.
davy.ai
Para inicializar un puntero doble con
sizeof
un puntero, debemos rellenar*p
en lugar de?
en el fragmento de código proporcionado. Esto se debe a que*p
derreferencia el punterop
, devolviendo un puntero de tamañosizeof(int*)
. Por lo tanto,p[i]
se le asigna la dirección de un bloque de memoria de tamañosizeof(int*) * cols
.El código modificado se vería así:
Aquí,
sizeof *p[i]
equivale asizeof(int)
ya que*p[i]
derreferencia el punterop[i]
, devolviendo un valor entero.Ten en cuenta que es importante asignar memoria tanto para los punteros externos como internos para evitar fallos de segmentación y comportamiento indefinido. Además, no olvides verificar si
malloc
tuvo éxito al asignar memoria.