2016-12-24 105 views
0

看來這個問題是所謂的懸掛指針問題。基本上我試圖解析一個指針到一個函數中(將指針存儲爲一個全局變量),並且我希望指針被存儲在該類中,並且可以立即使用。所以從課內,我可以操作這個指針和它在課堂外的值。C++指針崩潰(未初始化)

我簡化的代碼並重新創建的情況如下所示:

的main.cpp

#include <iostream> 
#include "class.h" 

using namespace std; 

void main() { 
    dp dp1; 
    int input = 3; 
    int *pointer = &input; 
    dp1.store(pointer); 
    dp1.multiply(); 
} 

class.h

#pragma once 

#include <iostream> 

using namespace std; 

class dp { 

public: 
    void store(int *num); // It stores the incoming pointer. 
    void multiply(); // It multiplies whatever is contained at the address pointed by the incoming pointer. 
    void print(); 


private: 
    int *stored_input; // I want to store the incoming pointer so it can be used in the class now and then. 

}; 

class.cpp

#include <iostream> 
#include "class.h" 

using namespace std; 

void dp::store(int *num) { 
    *stored_input = *num; 
} 

void dp::multiply() { 
    *stored_input *= 10; 
    print(); 
} 

void dp::print() { 
    cout << *stored_input << "\n"; 
} 

有沒有compi le錯誤,但運行後,它崩潰。

它說:

未處理的異常拋出:寫訪問衝突。

this-> stored_input是0xCCCCCCCC。

如果有這種異常的處理程序,程序可能會安全地繼續。

我按下「破」,它打破了在class.cpp的七號線:

*stored_input = *num; 
+0

*** this-> stored_input was 0xCCCCCCCC。***您沒有初始化stored_input。 http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations – drescherjm

+0

記住stored_input是一個指針。 – drescherjm

+0

這裏只是一個建議,但考慮在['unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)這將讓你的類控制指針,而不是你的類取決於變量它不擁有。考慮例如:'void bad(dp&param){int input = 3; dp.store(輸入); }'現在傳遞的'dp'包含一個無效值:( –

回答

3

它不是一個懸擺指針,但沒有初始化,您可能希望:

void dp::store(int *num) { 
    stored_input = num; 
}