C++ 在free()中:错误:垃圾指针,太高而没有意义分段错误:11(内核转储)gprof

C++ 在free()中:错误:垃圾指针,太高而没有意义分段错误:11(内核转储)gprof,c++,profiling,freebsd,C++,Profiling,Freebsd,我正在尝试分析我的应用程序。为此,我使用-pg和-lc_p选项编译代码,它编译成功 在运行时,我遇到以下错误。 在free()中:错误:垃圾指针,太高,没有意义 分段故障:11(堆芯倾倒) 执行GDB会产生错误 (gdb) b main Breakpoint 1 at 0x5124d4: (gdb) r warning: Unable to get location for thread creation breakpoint: generic error [New LWP 100085] ca

我正在尝试分析我的应用程序。为此,我使用-pg和-lc_p选项编译代码,它编译成功

在运行时,我遇到以下错误。 在free()中:错误:垃圾指针,太高,没有意义 分段故障:11(堆芯倾倒)

执行GDB会产生错误

(gdb) b main
Breakpoint 1 at 0x5124d4:
(gdb) r
warning: Unable to get location for thread creation breakpoint: generic error
[New LWP 100085]
cacheIp in free(): error: junk pointer, too high to make sense

Program received signal SIGSEGV, Segmentation fault.
[Switching to LWP 100085]
0x00000000006c3a1f in pthread_sigmask ()
我的应用程序是多线程的,是C和C++代码的组合。
uname -a
FreeBSD 6.3-RELEASE FreeBSD 6.3-RELEASE #0: Wed Jan 16 01:43:02 UTC 2008    root@palmer.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP amd64

没有-pg选项,代码运行良好。为什么代码与-pg冲突。我是否遗漏了什么

您的代码中可能有一个或多个潜在的bug,这些bug在您尝试使用gprof进行评测时才显现出来。尝试在
valgrind
下运行您的代码以清除任何错误-修复这些错误-然后再次尝试评测。

valgrind当然可以在amd64上工作,它是一个主要的开发平台。
因此,在valgrind下运行它肯定会有所帮助。

然后,要么花一些时间跟踪错误,要么构建一个支持valgrind的系统。;-)您是否可以访问可以运行Valgrind的Linux机器?这听起来确实有点像潜伏的内存错误。另外,还可以尝试显式编译x86 32位二进制文件,看看这是否会改变情况。@Mayank:您的首要任务是修复任何与内存相关的错误-在支持valgrind的系统上使用valgrind进行调试可能会更快,但如果失败,您只需在当前系统上以旧的skool方式进行调试。