我想創建一個指針數組,指向我的理解。但是,我正在使用valgrind運行讀取和寫入無效。使用C創建一個動態的字符數組指針指針
char **format_file(FILE *infile) {
char **char_array = malloc(20 * sizeof(char*));
int c;
int cUsed = 0;
while ((c = fgetc(infile)) != EOF) {
char_array[cUsed] = c;
cUsed += 1;
}
printf("%s", *char_array);
return char_array;
}
該代碼通過從已打開的文件「infile」中讀取而工作。首先我用malloc
爲20個字符分配了內存,然後我試圖按字符將文件字符讀入分配的內存數組中,直至達到F到達EO
。然而,的valgrind的輸出如下所示,當我使代碼:
==7379== Invalid read of size 1
==7379== at 0x4E7CB36: vfprintf (vfprintf.c:1597)
==7379== by 0x4E85198: printf (printf.c:35)
==7379== by 0x400755: format_file (formatter.c:27)
==7379== by 0x4006C1: main (format265alt.c:21)
==7379== Address 0x6f is not stack'd, malloc'd or (recently) free'd
線27是printf
命令的valgrind稱之爲尺寸1.
formatter.c由含有所述文件的無效的讀format265alt.c是一個調用formatter.c函數並打開要讀取的文件的文件。
我對**的語法感到困惑,那就是如何訪問和讀寫分配的內存?
如果我沒有提供有關此問題的足夠信息,我表示歉意。
'CHAR_ARRAY [cUsed]'是'型將char *''不過是C'型'int'的。在那裏看到問題? – kaylum
沒錯,但即使我把c變成角色,它仍然不起作用。 –
你爲什麼要施放它?鑄造不是魔術。除非你知道你在做什麼,否則不要這樣做。關鍵是你的類型是錯誤的。解決這個問題(並且不,鑄造不是這樣)。 – kaylum