C++提交myprogramminglab报非法修改内存错误该如何修复
问题修正方案
核心错误点
- 违反作业要求自定义了
date类:作业明确要求仅调用7.1a中预定义的Date类,自定义类不仅不符合要求,还可能和平台提供的Date类实现冲突 - 缺少
<string>头文件引用:代码中使用了std::string类型但未引入对应头文件,会引发未定义行为 - 数组越界风险:未对输入的月份值做合法性校验,当输入月份小于1或大于12时,访问
monthName[month-1]会触发数组越界,也就是平台提示的非法内存修改问题
修改后代码
#include <iostream> #include <string> // 若平台要求引入7.1a的Date类头文件,此处添加 #include "Date.h" 即可 using namespace std; int main() { int month; int day; int year; const string monthName[12] = {"January","February","March","April","May","June","July", "August","September","October","November","December"}; cout << "date information: "; cin >> day >> month >> year; // 月份合法性校验,避免数组越界 if (month < 1 || month > 12) { // 可根据作业要求调整错误处理逻辑,此处默认设为1避免崩溃 month = 1; } Date newDate(month, day, year); newDate.showDate(); cout << monthName[month-1]<< " " << day << ", " << year << endl; cout << day << " " << monthName[month-1] << " " << year << endl; return 0; }
注意事项
- 若平台预定义的
Date类构造函数参数顺序不是月/日/年,可根据7.1a的类定义调整传入参数的顺序 - 若作业要求必须用
Date类的成员函数实现后两种格式输出,可删除自行实现的monthName相关逻辑,调用Date类对应的方法输出即可
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

