看来这个问题是所谓的悬空指针问题。基本上,我正在尝试将指针解析为一类内部的函数(将指针作为全局变量存储),我希望指针存储在该类中,并且可以时不时地使用。因此,从班级内部,我可以操纵该指针及其值的价值。
我简化了代码并重新创建了以下情况:
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是0xccccccccc.
如果有此例外的处理程序,则可以安全地继续该程序。
我按了"断裂"它在班级的第7行中断裂:
*stored_input = *num;
它不是一个悬空的指针,但不是初始化的,您可能想要:
void dp::store(int *num) {
stored_input = num;
}