2012-12-10 115 views
0

嗨,朋友我得到這個錯誤whwn我正在運行我的代碼「glibc檢測*免費()無效指針」在我的代碼我創建3指針並分配內存只有一個使用新的和刪除所有三個指針。glibc檢測到***免費()無效指針

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出NOF 10時它給上述error..please時間幫我究竟是什麼問題。因爲在C++中,我認爲刪除NULL指針是安全的。

+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

[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 
+0

謝謝,我知道你在說什麼但是我的擔憂是爲什麼每次都沒有給出錯誤。 – user1835342

+1

@ user1835342:Buggy代碼幾乎不可能理解,並且經常無法預測。修復錯誤和奧祕將消失。 –

+1

@ user1835342因爲有時指針碰巧是純粹的機會(當變量被放置在僅包含零的內存位置時可能發生)。 –

相關問題