- 嗨,大家好,我在這裏遇到一個很奇怪的問題。你對 分段錯誤有什麼想法嗎?任何意見,將不勝感激! Thx提前!
{
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) { struct 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;
}
====================================== ==================
--------------------------- LOG 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
> [email protected]:/media/work/project/rcd$
---------- ---------------- LOG 2 --------------------------------
#cp_msg_list#566
#found_bakup_msg_node#alloc_bakup_count=180 **0x7fe6e000d5b0**
#cp_msg_node_data#464 **0xffffffffe000d5b0** 0x2154620
Segmentation fault
[email protected]:/media/work/project/rcd$
OS: UNAME -a Linux的羅賓桌面2.6.32-38-通用#83 Ubuntu的SMP週三1月4日11時12分07秒UTC 2012 x86_64的GNU/Linux的 – user2203111 2013-03-24 18:27:27
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) – user2203111 2013-03-24 18:28:21
停止投射malloc()。這是C,而不是C++。它甚至可以幫助你追蹤錯誤。由於我們無法按原樣進行編譯/測試,因此所有片段都要遍歷。如果您可以將代碼縮小到更小,並且仍然有段錯誤,您可以快速找到它。既然你是Linux,你可能應該嘗試-pthread而不是-lpthread。 – 2013-03-24 23:44:57