在C中使用Malloc()的Seg Fault

时间:2014-07-23 21:37:02

标签: c struct malloc

我已经编写了一个程序,我已经创建了这个结构

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将正常工作,我的程序将继续。我已经尝试在测试程序中自己使用该功能,它完美无缺。你知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

如果你愿意,把你的整个代码放在一起,这样我就可以用gdb调试它(或者你可以自己动手):D

但是第二个问题的答案是:  原因是当你运行一个程序时,它有一些内存大小(除了你的变量和其他东西)它的操作系统! 如果您在使用内存时遇到问题(比如您的代码),则会出现分段错误! 但是当你添加一些代码行时,这会改变存储单元中的数据顺序写入,这样你的剩余代码就不会写入非法的存储单元! :d

例如: 如果在添加printf之前(" k");你在x1234上这是非法的,因为你已经有了段故障,在添加之后,你继续使用x4323,所以这是合法的,一切正常:D

你可以使用" gdb"到"反汇编"检查我说的话:D !!