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

C++运行出现Exception thrown: Write access violation错误如何解决

问题根因
  • 触发访问异常的核心原因是obj类的next指针未初始化:你申请了长度为100的obj数组,但每个对象的next都是野指针,执行n = n->next操作时会访问非法内存地址,直接触发写入访问违规。
  • 类设计冗余:n、k作为类成员变量完全不必要,二者是函数内临时遍历用的变量,放在类成员中会被多次调用修改,导致逻辑混乱、出现重复执行、数据损坏等异常表现。
  • 逻辑缺失:要通过next指针遍历数组存储数据,需要先手动建立数组元素的链表关联,让每个元素的next指向数组的下一个相邻元素。
修复后的完整代码
#include <iostream>
using namespace std;
class obj{
public:
    int val;
    obj* next;
    int current = 0;
    
    void func(int data){
        obj* n = this;
        int k = 0;
        for(; k<current; n = n->next,k++){
            cout<<"k= "<<k<<" = "<<n<<" = "<<n->val<<" curr= "<< current<<", ";
        }
        cout<<endl;
        n->val = data;
        current++;
    }
    
    void print(){
        obj* n = this;
        int k = 0;
        for(; k<10;n = n->next,k++)
        {
            cout<<n->val<<"  ";     
        }
    }
};

int main() {
    obj *m = new obj [100];
    // 初始化next指针,建立数组元素的链表关联
    for(int i=0;i<99;i++){
        m[i].next = &m[i+1];
    }
    m[99].next = nullptr;
    for(int i=2; i<=20;i+=2)
    {
        m->func(i);
    }
    m->print();
    delete[] m;
    cout << endl;
    return 0;
}
修复说明
  • 移除了类中冗余的n、k成员变量,改为对应函数内部的局部变量,避免变量被意外篡改导致逻辑异常。
  • 新增了数组元素的next指针初始化逻辑,让每个元素的next指向数组下一个相邻元素,最后一个元素的next置空避免野指针。
  • 运行修改后的代码可正常输出2 4 6 8 10 12 14 16 18 20,无异常报错。

内容的提问来源于stack exchange,提问作者With Orxan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:03