1

0i は、次のように構造体を宣言しています。

struct node
    {
        int num;
        struct node *ptr;
    };

    typedef struct node NODE;

そして、最初にそれを指しているというポインターを持つリンクリストがあります。

そして、上記のタイプNODEの配列も宣言しましたNODE* array[312500];

そして今、配列[0]が最初ではなくリンクされたリストを指すようにしたいので、使用しました array[0]->ptr=first;

しかし、この方法ではセグメンテーション違反が発生します!!! 何が問題なのだろう!!!

4

2 に答える 2

4

ポインタの配列を宣言しましたが、どのポインタにもメモリを割り当てていません。

NODE* array[312500];

タイプ NODE* の 312500 個のポインターの配列です。

sだけが必要な場合はNODE、次のように言います

NODE array[312500];

それ以外の場合は、次のように言う必要があります

array[0] = (NODE*) malloc(sizeof(NODE));

そして、あなたはそれを変更することができますptr

于 2013-11-14T16:13:05.217 に答える
2

配列にメモリを割り当てるのを忘れました。ポインターの配列があるだけなので array[0]->ptr、セグメンテーション違反が発生します。
最初にメモリを配列に割り当てます。

for(i=0;i<312500;++i)
{
   array[i]=(NODE*) malloc(sizeof(NODE));
}

または、少なくともarray[0]使用するのと同じ構文でarray[0]->ptr.

于 2013-11-14T16:20:41.433 に答える