您好,
我还在学习高级c ++编程。我在C ++代码中遇到分段错误。在使用gdb时,故障点是在解除分配期间,解除分配器(malloc)的一个参数是一个优化的值(av =值优化输出)。我的问题是,这个条件(值是否优化)导致解除分配器中的分段错误?我问这个的原因是因为我能够打印这些值,但gdb因某些原因无法读取它们。
感谢。
答案 0 :(得分:6)
不,优化的值只是意味着优化器通过寄存器传递参数,这意味着gdb无法看到它的值。如果使用-O0进行编译,则会在gdb中看到该值。
错误可能是你的错误。例如。释放已经被释放的地址,或释放从未分配过的地址。
另外,对于C ++,建议使用new
,delete
,new[]
和delete[]
。
您需要提供更多背景信息。
答案 1 :(得分:1)
优化的值不能引入段错误。这意味着在调用之后没有使用malloc
的参数,所以不是将它存储在调用者的堆栈帧中,而是使用寄存器将其直接传递给malloc
,因此gdb无法显示内存地址(它没有存储在内存中)