我想创建一个指针数组,指向我的理解。但是,我正在使用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