C segfault错误:结构、指针、2D数组

C segfault错误:结构、指针、2D数组,c,C,我在玩指针和结构。这就是我一直在搞的程序。我得到一个segfault错误,我不知道为什么。我已经看了一段时间了,但似乎无法指出问题所在。有人能给我解释一下吗 编辑:在createArray中,我在*purp[I][j]=“1”处得到一个segfault #include <stdio.h> #include <stdlib.h> struct purple_struct{ int x; int y; char **purp; }; void print(i

我在玩指针和结构。这就是我一直在搞的程序。我得到一个segfault错误,我不知道为什么。我已经看了一段时间了,但似乎无法指出问题所在。有人能给我解释一下吗

编辑:在createArray中,我在*purp[I][j]=“1”处得到一个segfault

#include <stdio.h>
#include <stdlib.h>

struct purple_struct{
  int x;
  int y;
  char **purp;
};

void print(int x, int y){
    printf("%d %d\n", x, y);

    return;
}

void createArray(char*** purp, int x, int y){
    int i, j;

    for (i = 0; i < x; ++i){
        for (j = 0; j < y; ++j){
            *purp[i][j] = '1';
        }
    }

    return;
}

int main(){
    int i, j;

    struct purple_struct dog;

    dog.x = 3;
    dog.y = 4;

    dog.purp = (char **)malloc(dog.x * sizeof(char *));
    for (i = 0; i < dog.x; ++i){
        dog.purp[i] = (char *)malloc(dog.y * sizeof(char));
    }

    createArray(&dog.purp, dog.x, dog.y);

    for (i = 0; i < dog.x; ++i){
        for (j = 0; j < dog.y; ++j){
            printf("%c", dog.purp[i][j]);
        }
    }

    print(dog.x, dog.y);

    return 0;
}
#包括
#包括
紫色结构{
int x;
int-y;
字符**紫色;
};
无效打印(整数x,整数y){
printf(“%d%d\n”,x,y);
返回;
}
void createArray(字符***目的,整数x,整数y){
int i,j;
对于(i=0;i
您需要理解的概念。就像在数学中,像1+2×3这样的表达式表示1+(2×3)而不是(1+2)×3一样,编程语言对表达式中不同运算符的执行顺序有规则

C的规则如下:

在你的例子中,问题是*purp[i][j]实际上意味着*(purp[i][j]),而不是你所期望的(*purp[i][j]

void createArray(char*** purp, int x, int y){
*purp[i][j] = '1';
我想应该是这样

void createArray(char** purp, int x, int y){
purp[i][j] = '1';
大体上

createArray(&dog.purp, dog.x, dog.y);
此处不需要“&”,因为您已在传递指针。“&”通常用于传递变量的地址。
纠正这几件事情,它编译得很好,不确定你想做什么。

最好从像
gdb
这样的调试器开始提示:不要倾向于成为一名三星级程序员。甚至这都不是必需的。在一个普通的调试器上,比如Eclipse调试器,逐行显示错误在哪里。“printf”也一直是我的朋友
*purp[i][j]=“1”-->
(*purp)[i][j]='1'
无效创建数组(char**purp,intx,inty){
purp[i][j]=“1”;
调用
创建数组(dog.purp,dog.x,dog.y);