-4

所以我想做的是有一个列表数组,这是我的代码:

typedef struct stackList{
    List * list;
} stack;

int main(){
    int x;
    stack ** stackTable;

    for(x=0;x<100;x++) 
        stackTable[x]=malloc(sizeof(stack*)*100);
}

我在 for 循环中遇到分段错误,我会假设我尝试使用该结构的方式是错误的。我宁愿在结构的定义中使用 List ** list; 或者有没有办法像我尝试使用它一样使用它

4

2 回答 2

2

您会遇到分段错误,因为您正在访问未初始化的 stackTable。您无法知道它指向的内存地址,并且您还没有分配一个数组来保存要取消引用的指针。

您需要使stackTable指向一个有效的指针数组,在这种情况下,我认为将其设为数组很方便:

Stack* stackTable[100];

现在你有一个指向Stack的指针数组,你可以初始化它们。

相反,如果您只是临时有一个大 100 的数组,并且您需要让它在未来增长,这就是动态分配它的方式:

Stack** stackTable= malloc(100*sizeof(Stack*));
于 2013-07-05T19:57:37.727 回答
-1

在尝试使用指针和动态内存之前,我可能会建议使用基本的二维数组编写一些基本程序。例如:

char array2d[10][10];

一旦您可以轻松地将元素插入此数组、提取元素等,您就可以将所有相同的原则应用于任何类型。

于 2013-07-05T19:54:06.630 回答