繁体   English   中英

在 C 中设置二维字符数组时出现 SegFault

[英]SegFault when setting up 2D character array in C

我正在尝试设置一个 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"

并且,当您完成缓冲区时,不要忘记为callocmalloc的每个调用调用free

此外,您不必调用calloc - 您可以只使用malloc(10 * sizeof(char*)) :当您立即将所有指针全部替换为“其他”时,将所有指针设置为零确实没有意义malloc调用将返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM