C++指针与内存分配相关代码查错:找4处错误实现输出302
目标代码4处错误定位与修正
错误总览
你找到的第1处错误正确,第2处描述不够完整,还存在另外2处内存分配、输出逻辑错误,全部4处错误如下:
- 错误1:缺少标准输入输出头文件引入,且
cout、endl未指定std命名空间
修复方案:代码开头添加#include <iostream>,所有cout替换为std::cout,endl替换为std::endl - 错误2:
ptr指针未分配有效内存就进行赋值、解引用操作,且赋值语法错误
修复方案:两处ptr = int;语法完全不合法,统一替换为ptr = new int;,为指针分配堆上的int类型内存空间 - 错误3:第一个输出语句逻辑错误,输出了指针地址而非指向的数值
修复方案:将std::cout << ptr << std::endl;改为std::cout << *ptr << std::endl;,输出ptr指向的数值3 - 错误4:
temp指针未分配内存就赋值、解引用,且赋值类型不匹配
修复方案:删除temp = x;,先添加temp = new int;为temp分配内存,再写*temp = x;将x的值写入temp指向的内存空间
修正后完整代码
#include <iostream> int main () { int* ptr; int* temp; int x; ptr = new int; *ptr = 3; std::cout << *ptr << std::endl; x = 0; temp = new int; *temp = x; std::cout << *temp << std::endl; ptr = new int; *ptr = 2; std::cout << *ptr - *temp << std::endl; // 可选补充:释放堆内存避免泄漏 delete ptr; delete temp; return 0; }
运行说明
修正后代码运行会依次输出3、0、2,三行内容拼接即为要求的“302”效果。
内容的提问来源于stack exchange,提问作者Devin Bowen
相关产品推荐
相关产品推荐

