我已经编写了一个程序,我已经创建了这个结构
struct position_found
{
int row;
int column;
struct position_found *next;
};
typedef struct position_found position_found, *position_found_ptr;
然后我使用此函数创建一个新的节点类型position_found
position_found_ptr new_position_found_node(int row, int column)
{
position_found_ptr x;
x=(position_found_ptr)malloc(sizeof(position_found));
if(x==NULL)
{
printf("out of memory");
exit(2);
}
x->row=row;
x->column=column;
x->next=NULL;
return x;
}
问题是x =(position_found_ptr)malloc(sizeof(position_found));介绍seg故障,但如果我在此之前打印一些东西,例如printf(“k”);, malloc将正常工作,我的程序将继续。我已经尝试在测试程序中自己使用该功能,它完美无缺。你知道发生了什么吗?
答案 0 :(得分:0)
如果你愿意,把你的整个代码放在一起,这样我就可以用gdb调试它(或者你可以自己动手):D
但是第二个问题的答案是: 原因是当你运行一个程序时,它有一些内存大小(除了你的变量和其他东西)它的操作系统! 如果您在使用内存时遇到问题(比如您的代码),则会出现分段错误! 但是当你添加一些代码行时,这会改变存储单元中的数据顺序写入,这样你的剩余代码就不会写入非法的存储单元! :d
例如: 如果在添加printf之前(" k");你在x1234上这是非法的,因为你已经有了段故障,在添加之后,你继续使用x4323,所以这是合法的,一切正常:D
你可以使用" gdb"到"反汇编"检查我说的话:D !!