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

C++代码出现写入内存违规错误,调用show()后闪退求助

内存写入违规与程序闪退问题的解决方案

我一眼就定位到了问题的核心——你的数组索引逻辑完全搞反了,这直接导致程序访问了未初始化的野指针,触发内存写入违规并闪退。下面给你详细分析和修复方案:

问题根源:错误的索引与计数顺序

你的count变量初始值是0,在添加第一个形状时,你先执行了count++(count变成1),然后把新创建的对象赋值给a[count]也就是a[1]。但在Show All的循环里,你是从x=0遍历到x<count(也就是x=0),这时候a[0]根本没有被赋值过,是一个随机的野指针,调用a[x]->show()自然会触发内存访问错误,直接导致程序崩溃。

分步修复方案

1. 修正数组索引与计数顺序

把count++放到对象赋值之后,确保每次都是先给当前count对应的数组位置赋值,再增加计数。比如添加形状的核心代码改成:

else if (user_choice == 1) {
    cout << "---===Menu===---" << endl;
    cout << "(1). Lingkaran" << endl;
    cout << "(2). Segitiga" << endl;
    cout << "(3). Back" << endl;
    cout << "Masukkan Pilihan Anda : ";
    cin >> pilihan;
    if (pilihan == 1) {
        int radius;
        cout << "Masukkan Radius : ";
        cin >> radius;
        a[count] = new lingkaran(radius); // 先给当前count位置赋值
        count++; // 赋值完成后再增加计数
    } else if (pilihan == 2) {
        int alas, tinggi;
        cout << "Masukkan Alas : ";
        cin >> alas;
        cout << "Masukkan Tinggi : ";
        cin >> tinggi;
        a[count] = new segitiga(alas, tinggi);
        count++; // 同样把count++移到赋值后
    } else if (pilihan == 3) {
        break;
    }
}

2. 确保基类show函数是虚函数

你用基类shape*的数组存储派生类对象,要让程序正确调用lingkaran和segitiga各自的show方法,必须在基类shape中把show声明为虚函数,否则会调用基类的show(如果基类没有实现,会导致未定义行为)。示例如下:

class shape {
public:
    // 声明为纯虚函数,强制派生类实现自己的show方法
    virtual void show() = 0;
    // 必须添加虚析构函数,避免释放派生类对象时的内存泄漏
    virtual ~shape() {}
};

3. 修正main函数的返回值

C++标准明确要求main函数必须返回int,不能用void main(),改成int main(),并在程序末尾添加return 0;,这不仅是规范,也能避免一些潜在的运行时问题。

4. 处理内存泄漏

程序结束前记得遍历数组,释放所有用new创建的对象,避免内存泄漏:

// 在while循环结束后添加
for (int x = 0; x < count; x++) {
    delete a[x];
}

修复后的Show All循环验证

修正索引后,show循环里的a[x]都是已经正确初始化的派生类对象指针,调用show()就不会再触发内存错误了:

else if (user_choice == 2) {
    for (int x = 0; x < count; x++) {
        cout << "test1" << endl;
        a[x]->show();
        cout << "test2" << endl;
        cout << endl;
    }
}

按照以上步骤修改后,你的程序应该就能正常运行,不会再出现内存违规和闪退的问题了。

内容的提问来源于stack exchange,提问作者EKA WIJAYA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:23