pointer kopieren
-
Will aus einem File mit Format
x : a b c y : a b c z : a b c
einlesen und jeweils mit einem stringtoken x y und z heraussortieren und diese in ein 2 dimensionales array schreiben nur krieg ich da einen Segmentation Fault:
char** getIfaces() { FILE *fp = fopen("test.txt", "r"); if (fp == NULL) { printf("Opening device file not possible"); exit(1); } char *buf = malloc(sizeof(char) * 1024); char **ifaces; ifaces = malloc(sizeof(char*) * 16); for (int i=0; i<16; i++) { *ifaces = malloc(sizeof(char) * 10); ifaces++; } char *delim = ":"; char *ptr; int i=0, j=0; while ((buf = fgets(buf, 1024, fp)) != NULL) { ptr = strtok(buf, delim); strncpy(*(ifaces+j), ptr, strlen(ptr)); j++; } return ifaces; }
-
Typ222 schrieb:
ifaces++;
Du inkrementierst ifaces und nachdem ifaces dann auf undefinierten Speicherplatz zeigt, schreibst du was rein.
-
das array wird ja vorher mit
ifaces = malloc(sizeof(char*) * 16);
initialisiert, ist ja ein 2 dim array...
-
Typ222 schrieb:
das array wird ja vorher mit
ifaces = malloc(sizeof(char*) * 16);
initialisiert, ist ja ein 2 dim array...
Du inkrementierst den Zeiger, dem du Speicher zugewiesen hast. Danach zeigt er nicht mehr auf den Anfang des Speicherbereichs. Am Ende der for-Schleife zeigt iFaces auf ungültigen Speicher, nämlich genau auf den Speicher hinter deinem Array.
Wenn du unbedingt einen Zeiger inkrementieren willst, weil das cool ist, dann nimm einen zweiten. Zeiger, die die einzige Verbindung zu dynamisch angefordertem Speicher sind, verändert man nicht. Oder viel besser: ersetze
*ifaces = malloc(sizeof(char) * 10); ifaces++;
doch einfach mit
ifaces[i] = malloc(sizeof(char) * 10);