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";
}

没有编译错误,但是运行后,它崩溃了。

它说:

毫无根据的例外:写访问违规。

this-&gt; stored_input是0xccccccccc.

如果有此例外的处理程序,则可以安全地继续该程序。

我按了"断裂"它在班级的第7行中断裂:

*stored_input = *num;

它不是一个悬空的指针,但不是初始化的,您可能想要:

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

相关内容

  • 没有找到相关文章