這裏是我的代碼...指針嵌套結構
#include <stdio.h>
struct one
{
struct two
{
int r;
}*b;
}*a;
void main()
{
//struct two *new = &(*a).b;
//new->r = 10;
//printf("Value: %d", new->r);
a = malloc(sizeof(struct one));
//b = malloc(sizeof(struct two));
(a->b)->r = 10;
printf("Value: %d", (a->b)->r);
return 0;
}
我試圖在這裏,定義一個結構成的結構。現在這兩個對象都應該是指針。我想要設置r
的值然後顯示它。
的唯一的事情我使用gdb
我得到了下面的,這似乎沒有多大幫助得到它Segmentation Fault
..
(gdb) run
Starting program: /home/sujal.p/structtest/main
Program received signal SIGSEGV, Segmentation fault.
0x08048435 in main()
我想知道如何執行提及的行動,爲什麼這件事情得到分割故障。我已經嘗試了一些網站上可用的方式,包括Stackoverflow的一些問題。
註釋行是我嘗試實現目標失敗,但失敗的同一個錯誤。
編輯試圖下文提到的技術後..
void main()
{
//struct two *new = &(*a).b;
//new->r = 10;
//printf("Value: %d", new->r);
//a = malloc(sizeof(struct one));
//a my_a = malloc(sizeof*my_a);
//my_a->b = malloc(sizeof *my_a->b);
//my_a->b->r = 10;
//b = malloc(sizeof(struct two));
//(a->b)->r = 10;
//printf("Value: %d", my_a->b->r);
a = (one*)malloc(sizeof(struct one));
a->b = (one::two*)malloc(sizeof(struct one::two));
(a->b)->r = 10;
printf("Value: %d", (a->b)->r);
return 0;
}
我已經嘗試了所有的提到的技術,他們給我的錯誤..最後的錯誤我得到的是如下..
new.c: In function âmainâ:
new.c:24:7: error: âoneâ undeclared (first use in this function)
new.c:24:7: note: each undeclared identifier is reported only once for each function it appears in
new.c:24:11: error: expected expression before â)â token
new.c:25:13: error: expected â)â before â:â token
new.c:25:20: error: expected â;â before âmallocâ
new.c:28:2: warning: âreturnâ with a value, in function returning void [enabled by default]
這是我得到的一個錯誤.. 。new.c:在函數中“mainâ: new.c:17:4:錯誤:預期““my_aâ new.c:18:2:錯誤:âmy_aâ未聲明(首次在此函數中使用) 新。 c:18:2:注意:每個未聲明的身份每個功能只會報告一次,它會在 新出現。c:18:12:警告:內置函數的不兼容隱式聲明:默認情況下啓用 new.c:22:2:錯誤:預計在之前打印出來 new.c:23:2警告: âreturnâ有一個值,在函數返回void [默認情況下啓用]' – 2013-04-10 10:13:18
不適合我...這讓我瘋狂...這是沖洗我的觀念.. – 2013-04-10 10:24:36
呃,不知道你爲什麼使用你的代碼中有大量的'::',那就是C++,而且根本不是有效的C語法。另外[應該沒有'malloc()'的返回值的轉換,在C]中(http://stackoverflow.com/a/605858/28169)。 – unwind 2013-04-10 10:29:09