看来这个问题就是所谓的悬空指针问题。基本上我试图将指针解析为一个函数(将指针存储为全局变量)在一个类中,我希望指针存储在该类中,并且可以偶尔使用。所以从类中,我可以操作这个指针及其在类之外的值。
我简化了代码并重新创建了以下情况:
的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";
}
没有编译错误,但在运行之后,它崩溃了。
它说:
抛出未处理的异常:写入访问冲突。
this-&gt; stored_input是0xCCCCCCCC。
如果存在此异常的处理程序,则可以安全地继续该程序。
我按下&#34;休息&#34;它在class.cpp的第7行打破了:
*stored_input = *num;
答案 0 :(得分:3)
它不是一个悬空指针,而是一个未初始化的指针,你可能想要:
void dp::store(int *num) {
stored_input = num;
}