0

こんにちは友人私は私のコードで私のコード「glibcdetected * free()invalidpointer」を実行しているときにこのエラーが発生します私は3つのポインターを作成し、newを使用して1つだけにメモリを割り当て、3つのポインターすべてを削除しています。

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;


}

そして、私が実行しているとき、それは上記のエラーを与えていますが、驚くべきことに、それがエラーを与えているときはいつもではありません。C ++では、NULLポインタを削除しても安全だと思います。

4

1 に答える 1

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

たとえば、Clang を使用すると、これについて警告が表示されます-Wall

[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
于 2012-12-10T04:33:57.460 に答える