【发布时间】:2018-05-01 16:36:43
【问题描述】:
我的代码实际上是如何给出分段错误的?
我想将TOS 保留为双指针。
#include<stdio.h>
#include<stdlib.h>
typedef struct node_tag{
int num;
struct node_tag* next;
}NODE;
void push(int x, NODE **TOS){
NODE* temp = (NODE*) malloc(sizeof(NODE));
temp->num = x;
temp->next = (*TOS);
(*TOS) = temp;
}
int main(){
NODE **TOS = NULL, *temp;
printf("<<<Stack Push>>>\n");
push(0, TOS);
printf("%i\n", (*TOS)->num);
}
【问题讨论】:
-
因为您在此代码中取消引用
NULL。 -
NODE **TOS = NULL->NODE *TOS = NULL,push(0, TOS);->push(0, &TOS);,printf("%i\n", (*TOS)->num);->printf("%i\n", TOS->num); -
malloc返回一个void指针,它会自动转换为任何其他类型。不要从malloc转换返回值,这样做会掩盖编译器可能为您检测到的编码错误。 -
@BakaBaka 如果您的问题已解决,您可以通过单击您认为最有用的答案旁边的复选标记将此问题标记为已解决。