如何将用户输入存入类的指针成员变量并进行解引用
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
相关产品推荐
相关产品推荐

