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