【问题标题】:glibc detected *** free() invalid pointerglibc 检测到 *** free() 无效指针
【发布时间】:2012-12-10 12:39:48
【问题描述】:

嗨朋友们,当我在我的代码中运行我的代码“glibc 检测到 * free() 无效指针”时,我收到了这个错误我正在创建 3 个指针并使用 new 和分配内存只给一个删除所有三个指针。

class test()
{
public : 
int a;
/..some functionality../

}; 

class second_test()
{
public : 
int b;
/..some functionality../
} 

  class third_test()
    {
    public : 
    int c;
    /..some functionality../
    } 




int main()
{
test *ptrtest;
second_test *psecond_test;
third_test*pthird_test;



ptrtest = new test;
/..Doing some functionality.../


delete ptrtest;
   delete psecond_test;
delete pthird_test;


}

当我运行它时,它给出了上述错误,但令人惊讶的是,它在 10 次中给出了 7 次错误,它给出了上述错误..请帮助我到底是什么问题。 因为在 c++ 中我认为删除 NULL 指针是安全的。

【问题讨论】:

  • 提供重现问题的可编译代码。所有删除的代码使得诊断问题几乎不可能。

标签: c++


【解决方案1】:
second_test *psecond_test;

它不指向空指针。

second_test *psecond_test = NULL; 

确实如此。


例如,这里有一些代码:

#include <cstdio>

int main() {
    struct x *ptr;
    printf("%p\n", ptr);
}

当我运行它时,我每次都会得到不同的地址。 (虽然它们可能相同,但它们可能为零,它们是什么是未定义的)

[10:36pm] ./foo
0x7fff6413205e
[10:36pm] ./foo
0x7fff6cff105e
[10:36pm] ./foo
0x7fff6890305e

例如,当我使用 -Wall 时,Clang 会发出警告。

[10:41pm] clang++ -Wall foo.cc
foo.cc:5:9: warning: variable 'ptr' is uninitialized when used here [-Wuninitialized]
        delete ptr;
               ^~~
foo.cc:4:10: note: initialize the variable 'ptr' to silence this warning
        int *ptr;
                ^
                 = NULL

【讨论】:

  • 谢谢你说的我明白了但我担心的是为什么每次它都没有给出错误。
  • @user1835342:错误代码几乎无法理解,而且经常无法预测。修复错误,谜团就会消失。
  • @user1835342 因为有时指针碰巧为 NULL 纯属偶然(当变量放置在仅包含零的内存位置时可能发生。)
猜你喜欢
  • 2013-08-01
  • 2012-05-04
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2016-03-27
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多