-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

ポインタと動的メモリをいじるのに苦労する前に、基本的な 2 次元配列を使っていくつかの基本的なプログラムを書くことをお勧めします。例えば:

char array2d[10][10];

この配列への要素の挿入、要素の抽出などに慣れたら、同じ原則をすべて任意の型に適用できます。

于 2013-07-05T19:54:06.630 に答える