[英]malloc struct pointer throwing segmentation fault (core dumped)
我有這兩個結構
struct node{
int val;
struct node *up;
struct node *down;
};
struct stack {
struct node *bottom;
};
typedef結構在頭文件中定義
typedef struct stack stack_set;
我想malloc
的結構,但我不斷收到賽格故障時,我嘗試訪問node
結構。 我嘗試在node
結構上使用malloc
無效。
stack_set *set;
set = malloc(sizeof(stack_set));
set->bottom = NULL;
set = malloc(sizeof(struct node));
set->bottom->val = NULL;
return set;
我在第二行代碼中遇到了段錯誤。
我如何正確地malloc
代碼,以免繼續拋出seg錯誤? 我一直找不到能夠幫助解決我的問題的例子。
謝謝
看起來像是第四行的misptint(也可以混合使用root
和bottom
)。 嘗試這個:
stack_set *set;
set = malloc(sizeof(stack_set));
set->bottom = malloc(sizeof(struct node));
set->bottom->val = 0; // it is better to initialize
set->bottom->up = NULL; // all fields to avoid undefined
set->bottom->down = NULL; // behaviour in the future
return set;
另外最好檢查一下內存分配函數的結果:
stack_set *set;
set = malloc(sizeof(stack_set));
if (!set)
return NULL;
set->bottom = malloc(sizeof(struct node));
if (!set->bottom) {
free(set);
return NULL;
}
set->bottom->val = 0;
set->bottom->up = NULL;
set->bottom->down = NULL;
return set;
標准的malloc(3)函數。 返回未初始化的內存。 您需要初始化它。 所以之后
set = malloc(sizeof(struct node));
您所有的set
字段都包含垃圾值(或malloc
失敗並給出NULL
)。 特別是,您不應該取消引用set->root
,這是未定義的行為 ,如果運氣不好,它似乎可以工作。
我建議使用calloc
來獲得零內存:
set = calloc(1, sizeof(struct stack));
if (!set) {perror("calloc stack"); exit(EXIT_FAILURE); };
set->bottom = calloc(1, sizeof(struct node));
if (!set->bottom) {perror("calloc node"); exit(EXIT_FAILURE); };
如果您不能使用calloc
,請使用memset
清除內存。
編譯所有警告和調試信息( gcc -Wall -g
),並使用valgrind(如果可用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.