本篇文章主要介绍了"C中Segmentation fault的总结",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
Segmentation fault的错误表示访问了不该访问的内存片段(个人一点浅薄的理解哈~~)。我与Segmentation fault的故事是这样的:一开...
Segmentation fault的错误表示访问了不该访问的内存片段(个人一点浅薄的理解哈~~)。
我与Segmentation fault的故事是这样的:
一开始,先定义数据结构:
typedef struct TreeNode *BinTree;
struct TreeNode{
char *data;
BinTree left;
BinTree right;
} ;
然后写了个function进行初始化:
BinTree createChildTree(BinTree tree, char *left_data, char *right_data){
if(left_data){
// 注意啦,我这的sizeof给的是BinTree。。。。
BinTree left = (BinTree) malloc(sizeof(BinTree));
left->data = left_data;
left->left = NULL; left->right = NULL;
tree->left = left;
}
if(right_data){
BinTree right = (BinTree) malloc(sizeof(BinTree));
right->data = right_data;
right->left = NULL; right->right = NULL;
tree->right = right;
}
return tree;
}
当编译通过后,我满心欢喜的执行这段代码...当然了,SF出来了。。
于是乎,google了这个错误的含义。。瞬间觉得好悲剧。。
还好我内心强大,硬生生的一条一条语句注释检查,发现当两次调用createChildTree函数后,TreeNode里面的数据会是乱码,当时以为创建left活着right节点的时候没有进行初始化。
然而,代码中已经明显的进行了初始化呀。。。
这回,我感觉掉进了一个黑屋子里,相当大无助。
后来,发现printf sizeof BinTree输出的是8个字节,而printf sizeof TreeNode 却是32个字节
我忽然想到了什么,
是的。。申请的内存空间小于结构体的空间大小
而赋值的数据超出了malloc的内存片段,所以产生了SF的错误
当malloc中sizeof的参数改成TreeNode后,程序终于正常了。
最后,纪念一下我的这份代码:
tree_traversal_pre.c
以上就介绍了C中Segmentation fault的总结,包括了方面的内容,希望对其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_253147.html