You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将用户输入存入类的指针成员变量并进行解引用

C++代码问题分析与修正方案

原代码核心问题

  • 关键字冲突:case是C++的关键字,不能用作类成员变量名,必须修改。
  • 空指针解引用:p_member默认初始化为空指针(nullptr),直接解引用会触发未定义行为(程序崩溃、异常等),需要先为指针分配有效内存空间。
  • 语法错误:解引用类的指针成员时写法错误,正确语法应为*(对象.指针成员)(.的优先级高于*,必须加括号明确优先级)。

修正方案1:动态分配内存(裸指针)

需手动管理内存,避免泄漏:

#include <iostream>
using namespace std;

class cookie{
public:
    cookie() = default;
    int* p_member{};
    int case_val{}; // 替换关键字case为合法变量名
private:
};

int main(){
    cookie cold;
    // 为指针分配动态内存,指向堆上的int对象
    cold.p_member = new int;
    
    cout << "Type what you want into the cookie p_member variable " << endl;
    // 正确解引用指针成员,存入输入内容
    cin >> *(cold.p_member); 
    
    // 验证输入结果
    cout << "You entered: " << *(cold.p_member) << endl;
    
    // 释放动态内存,避免泄漏
    delete cold.p_member;
    cold.p_member = nullptr; // 置空指针,防止野指针
    
    return 0;
}

修正方案2:指向栈上变量(无需手动释放)

让指针指向栈上局部变量,内存会自动回收:

#include <iostream>
using namespace std;

class cookie{
public:
    cookie() = default;
    int* p_member{};
    int case_val{};
private:
};

int main(){
    cookie cold;
    int temp; // 栈上的int局部变量
    cold.p_member = &temp; // 让指针指向该变量
    
    cout << "Type what you want into the cookie p_member variable " << endl;
    cin >> *(cold.p_member); 
    
    cout << "You entered: " << *(cold.p_member) << endl;
    
    return 0;
}

修正方案3:使用智能指针(更安全,推荐)

用std::unique_ptr自动管理内存,避免手动释放的繁琐:

#include <iostream>
#include <memory> // 包含智能指针头文件
using namespace std;

class cookie{
public:
    cookie() = default;
    unique_ptr<int> p_member; // 替换裸指针为unique_ptr
    int case_val{};
private:
};

int main(){
    cookie cold;
    cold.p_member = make_unique<int>(); // 自动分配内存
    
    cout << "Type what you want into the cookie p_member variable " << endl;
    cin >> *cold.p_member; 
    
    cout << "You entered: " << *cold.p_member << endl;
    
    // 无需手动释放,智能指针会自动回收内存
    
    return 0;
}

内容的提问来源于stack exchange,提问作者Ekene Nwokedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:40:23