0

我在 c 中的结构有问题。

我有两个结构

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;

这意味着:“创建一个名为 ekstra 的类型”。从现在开始,这种类型可以用作任何变量类型(int、char 等)。

结构 ekstra *next;

这意味着:在我的程序中某处有某种类型的结构,我不知道它包含什么,但我想指向该类型的元素。这就是不完全类型的意思。

要解决您的问题,只需将此行替换为ekstra *next;.


更多与问题没有直接关系的评论:

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

这是纯粹的废话代码。它的意思是:“在我的程序的ROM部分创建一个常量字符串文字。在这个常量字符串文字中,存储字母“asdasd”和一个空终止字符。然后取这个ROM内存位置的地址,这完全不相关我的应用程序,将其转换为整数,以便我得到一个 32 位的无意义数字。然后将这个无意义的数字乘以一个 int 的大小,这对任何人都没有任何意义。然后取这个完全无意义的结果并分配一个基于此的随机动态内存量。然后观察程序崩溃。

于 2012-06-05T14:14:42.623 回答
-1

我不明白代码行之类的

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

但是,我认为你的问题应该像这样解决

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

你结构定义应该喜欢

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