【发布时间】:2013-03-14 04:39:40
【问题描述】:
- 大家好,我遇到了一个非常奇怪的问题。你有什么想法吗 分段故障?任何意见,将不胜感激!提前谢谢!
测试()
{
pMsg_node = found_bakup_msg_node();
if(pMsg_node != NULL) {
Dprintf("#%s#%d %p\n", __FUNCTION__, __LINE__, pMsg_node);
ret = cp_msg_node_data(pMsg_node, pMsg_next);
}
}
================================================ =====================
struct MSG_INFO* found_bakup_msg_node(void) { 结构 MSG_INFO* msg_node = NULL;
msg_node = (struct MSG_INFO*)malloc(sizeof(struct MSG_INFO));
if(msg_node != NULL) {
memset(msg_node, 0x0, sizeof(struct MSG_INFO));
Dprintf("#%s# %p\n", __FUNCTION__,
msg_node);
}
return msg_node;
}
================================================ =========
---------------日志 1------ --------------
> header=0x923950
>found_bakup_msg_node#alloc_bakup_count=1 0x7f6090032f70 //return from malloc()
>cp_msg_list#561
> cp_msg_node_data#458
>cp_msg_node_data#463 0xffffffff90032f70 0x923950 //notice here
>Segmentation fault
> robin@robin-desktop:/media/work/project/rcd$
--------------日志 2 ------- -------------
#cp_msg_list#566
#found_bakup_msg_node#alloc_bakup_count=180 **0x7fe6e000d5b0**
#cp_msg_node_data#464 **0xffffffffe000d5b0** 0x2154620
Segmentation fault
robin@robin-desktop:/media/work/project/rcd$
【问题讨论】:
-
操作系统:uname -a Linux robin-desktop 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:12:07 UTC 2012 x86_64 GNU/Linux
-
gcc -v 使用内置规范。目标:x86_64-linux-gnu 配置:../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc /gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 ... ...线程模型:posix gcc 4.4.3版(Ubuntu 4.4.3-4ubuntu5.1)
-
停止投射 malloc()。它是 C,而不是 C++。它甚至可以帮助您追踪错误。因为我们无法按原样编译/测试它,所以有太多的片段无法全部完成。如果您可以将代码减少到更小的部分并且仍然存在段错误,您可能会很快自己找到它。由于您是 Linux,因此您可能也应该尝试使用 -pthread 而不是 -lpthread。
标签: c multithreading malloc