我在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
安排?
答案 0 :(得分:8)
struct ekstra
与ekstra
不同。
您的第一个struct typedef应声明如下:
typedef struct ekstra
{
char isim[256];
int deger;
struct ekstra *sonra;
}ekstra;
答案 1 :(得分:0)
typedef struct ... ekstra;
这意味着:“创建一个名为ekstra的类型”。从现在开始,这种类型可以像任何变量类型一样使用(int,char等)。
struct ekstra * next;
这意味着:在我的程序中的某个地方有一个类型的结构,我不知道它包含什么,但我想指向该类型的元素。这是不完整类型的含义。
要解决您的问题,只需将此行替换为ekstra *next;
。
更多评论与此问题没有直接关系:
dizi [i] .name = malloc(“asdasd”* sizeof(int));
这是纯粹的无意义代码。它意味着:“在我的程序的ROM部分创建一个常量字符串文字。在这个常量字符串文字中,存储字母”asdasd“和一个空终止字符。然后取这个ROM内存的地址 location,这与我的应用程序完全无关,将它转换为一个整数,这样我得到一个32位的无意义数字。然后将这个无意义的数字与int的sizeof相乘,这对任何人都没有任何意义。然后采取这完全是无意义的结果,并根据此分配随机数量的动态内存。然后观察程序崩溃。
答案 2 :(得分:-1)
我不懂代码行
malloc("asdasd"*sizeof(int));
但是,我认为你的问题应该像这样解决问题
dizi[i].next = (ekstra *)malloc(sizeof(ekstra));
你的结构定义应该像
typedef struct node{
int a;
int b;
struct node *next;
}node;