glibc检测到*** free()无效指针

时间:2012-12-10 04:32:38

标签: c++

嗨朋友我得到这个错误,因为我正在运行我的代码“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;


}

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

1 个答案:

答案 0 :(得分:4)

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