allocazione dinamica C per una griglia quando le righe non sono noti
-
20-09-2019 - |
Domanda
Sto cercando di allocare un array di char * s 'in C. So che il numero di colonne in anticipo, ma non le righe e voglio allocare le righe come e quando necessario.
Ho cercato di usare:
char *(*data)[NUMCOLS]; //declare data as pointer to array NUMCOLS of pointer to char
data = malloc(sizeof(char*));
Ora, la linea di cui sopra dovrebbe allocare per i dati [0] ... corrette? poi, devo essere in grado di utilizzare la fila come
data[0][1] = strdup("test");
.
..
data[0][NUMCOLS-1] = strdup("temp");
Io sono sempre colpa seg. Io non sono in grado di capire ciò che è sbagliato qui. chiunque può aiutare prego.
Soluzione
Vorrei fare questo:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char ***a = NULL;
a = realloc( a, 1 * sizeof(char **) ); // resizing the array to contains one raw
a[0] = malloc( 3 * sizeof(char *) ); // the new raw will contains 3 element
a[0][0] = strdup("a[0][0]");
a[0][1] = strdup("a[0][1]");
a[0][2] = strdup("a[0][2]");
a = realloc( a, 2 * sizeof(char **) ); // resizing the array to contains two raw
a[1] = malloc( 3 * sizeof(char *) ); // the new raw will contains 3 element
a[1][0] = strdup("a[1][0]");
a[1][1] = strdup("a[1][1]");
a[1][2] = strdup("a[1][2]");
for( int rows=0; rows<2; rows++ ){
for( int cols=0; cols<3; cols++ ){
printf( "a[%i][%i]: '%s'\n", rows, cols, a[rows][cols] );
}
}
}
Altri suggerimenti
Non hai allocata memoria sufficiente per le cose che si desidera memorizzare. In questo caso particolare, che sarebbe:
data=malloc(sizeof(char*)*NUMCOLS*NUMROWS);
Per ridimensionare la matrice, si usa:
data=realloc(data,(size_t)sizeof(char*)*NUMCOLS*NEW_NUMROWS);
Più su di esso (riallocazione) qui
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow