在 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*)):当你立即去时,将所有指针设置为零真的没有意义将它们全部替换为 'other' malloc 调用将 return.