2014-07-23 16 views
-1

自己编写的程序,并且我已经建立这种结构波段故障使用malloc()用C

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将正常工作,并且我的程序将继续。我试过在测试程序中使用它自己的功能,它完美地工作。你有什么想法发生了什么?

+3

是的,您在程序中调用了未定义的行为。 –

+2

你有没有包含stdlib.h? –

+0

通过'valgrind'或其他内存调试器运行你的代码。它应该可以帮助你追踪真正的问题。 – FatalError

回答

0

,如果你想,把你的整个代码,所以我可以使用gdb调试它(或者你可以自己做):d

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

例如: 如果在添加printf(“k”)之前;你在x1234这是非法的,因为你有seg故障,添加后,你继续x4323,所以这是合法的,一切正常:D

你可以使用“gdb”来“反汇编”检查我说的是什么:D!

+0

非常感谢您的回答:D我问,因为它看起来很奇怪发生了什么,我不知道为什么。我会尝试使用gdb进行调试,如果这不起作用,我会发布我的整个代码,希望得到你的帮助:D – Raven