我正在尝试设置一个填充有'$'字符的10x10网格,然后进行打印。
char **plot; plot = (char**)calloc(100, sizeof(char)); int i,j; for (i=0; i< 10; i++) { for(j=0; j<10; j++){ plot[i][j] = '$'; } } for (i=0; i<10; i++) { for(j=0; j<10; j++) { printf("%c", plot[i][j]); } } free(plot);
到目前为止,这是我的代码,当我运行此代码时,我遇到了分段错误。
您仅分配了一个指针列表(并且分配不正确)!该行:
plot = calloc(10, sizeof(char*)); // Note the extra * in sizeof(char*)
创建一个包含10个指针的一维数组(列表)。然后,您需要为这些指针分配10个字符的缓冲区:
for (i = 0; i < 10; ++i)
plot[i] = malloc(10 * sizeof(char)); // Here use "sizeof(char)" but it's always "1"
而且,不要忘记调用free
每个调用的calloc
和malloc
当你与缓冲区完成!
另外,您不需要调用calloc
-您可以使用malloc(10 * sizeof(char*))
:在立即将所有指针替换为“其他” malloc
调用将返回的所有指针时,将所有指针都设置为零真的没有意义。