0

cの構造体に問題があります。

私は次のような2つの構造を持っています

typedef struct
{
    char isim[256];
    int deger;
    struct ekstra *sonra;
}ekstra;

typedef struct
{
    char *name;
    int val;
    struct ekstra *next;
}node;

/*and main is*/

int main()
{
    int i;
    node dizi[12];

    for(i=0;i<12;i++)
    {
        dizi[i].name = malloc("asdasd"*sizeof(int));
        strcpy (dizi[i].name,"asdasd");
        /*and trouble starts here*/
        **dizi[i].next = malloc(sizeof(ekstra));
        printf("%s",dizi[i].next->isim);**
    } 
}

エラーは

エラー:不完全な型へのポインタの間接参照

どうすれば場所を確保できdizi[i].nextますか?

4

3 に答える 3

8

struct ekstra is not the same as ekstra.

Your first struct typedef should be declared as follows:

typedef struct ekstra
{
    char isim[256];
    int deger;
    struct ekstra *sonra;
}ekstra;
于 2012-06-05T13:44:41.237 に答える
0

typedef 構造体... エクストラ;

これは、「ekstra と呼ばれるタイプを作成する」ことを意味します。今後、この型は任意の変数型 (int、char など) と同じように使用できます。

struct ekstra *next;

つまり、私のプログラムのどこかに何らかのタイプの構造体があり、それが何を含んでいるのかはわかりませんが、そのタイプの要素を指し示したいと考えています。これが不完全型の意味です。

問題を解決するには、この行を に置き換えるだけekstra *next;です。


質問に直接関係のないその他のコメント:

dizi[i].name = malloc("asdasd"*sizeof(int));

これはまったくナンセンスなコードです。つまり、「プログラムの ROM 部分に定数文字列リテラルを作成します。この定数文字列リテラルには、文字 "asdasd" と null 終端文字を格納します。次に、この ROM メモリ位置のアドレスを取得します。私のアプリケーションでは、それを整数に変換して 32 ビットの無意味な数値を取得します.次に、この無意味な数値に int のサイズを掛けます.これは誰にとっても意味をなさない.次に、この完全に無意味な結果を取得し、これに基づいて動的メモリのランダムな量. 次に、プログラムのクラッシュを監視します.

于 2012-06-05T14:14:42.623 に答える
-1

次のようなコード行がわかりません

malloc("asdasd"*sizeof(int));

しかし、私はあなたの問題がこのようにsloveするべきだと思います

dizi[i].next = (ekstra *)malloc(sizeof(ekstra));

そして、あなたは構造体の定義が好きでなければなりません

typedef struct node{
    int a;
    int b;
    struct node *next;
}node;
于 2012-06-05T13:49:48.297 に答える