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;
*** this-> stored_input was 0xCCCCCCCC。***您沒有初始化stored_input。 http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations – drescherjm
記住stored_input是一個指針。 – drescherjm
這裏只是一個建議,但考慮在['unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)這將讓你的類控制指針,而不是你的類取決於變量它不擁有。考慮例如:'void bad(dp&param){int input = 3; dp.store(輸入); }'現在傳遞的'dp'包含一個無效值:( –