【问题标题】:Exception thrown: write access violation抛出异常:写访问冲突
【发布时间】:2021-07-12 13:57:32
【问题描述】:

我正在尝试实现一个列表结构,但是当我编写在列表中的特定位置插入一个元素的 insert() 函数时,我得到一个错误 Exception throw: write access violation。 pl 为 0x34812B3A。 我尝试了很多来修复它,但我真的不能。我用了 try..throw..catch 仍然没有得到它,那我该怎么办。 这是我的代码:

列表.h

#pragma once
#define MAXLIST 100

typedef struct List {
    int size;
    int entry[MAXLIST];
    
}list;

void createl(list*); 
int ListEmpty(list*); 
int ListFull(list*);
int sizel(list*);
void destroyl(list*); 
void insert(int, int, list*);
void deletei(int* , int, list*); 
void traversel(list*, void (*)(int));
void retrieve(int*, int, list*);
void replace(int, int, list*);
//int access(int , list*);

这就是实现(List.cpp)

#include <iostream>
#include "List.h"

using namespace std;

void createl(list* pl) {
    pl->size = 0;
}

int isEmpty(list* pl) {
    return !(pl->size);
}

int isFull(list* pl) {
    return (pl->size == MAXLIST);
}

int sizel(list* pl) {
    return pl->size;
}

void destroyl(list* pl) {
    pl->size = 0;
}

void insert(int e, int p, list* pl) {   //insert element e in the postion p in the list
    for (int i = pl->size -1; i >= p; i--) {
        pl->entry[i+1] = pl->entry[i];
    }
    pl->entry[p] = e;
    pl->size++;
}

void deletei(int* pe, int p, list* pl) {
    *pe = pl->entry[p];
    for (int i = p + 1; i < pl->size; ++i) {
        pl->entry[i-1] = pl->entry[i];
    }
    pl->size--;
}

void traversel(list* pl, void (*pf)(int e)) {
    for (int i = 0; i < pl->size; ++i) {
        (*pf)(pl->entry[i]);
    }
}

void retrieve(int* pe, int p, list* pl) {
    *pe = pl->entry[p];
}


void replace(int e, int p, list* pl) {
    pl->entry[p] = e;
}

/*int access(int p, list* pl) {
    return pl->entry[p];
}*/

我在函数 insert() 中得到错误

pl->entry[p] = e;

这是一个用于检查我的代码是否有效的程序。

#include <iostream>
#include "List.h"

using namespace std;

void display(int e) {
    cout << e << "\n";
}

int main() {
    list l;
    list* ptl = &l;
    int t;
    cout << "Put 5 elements:\n";
    for (int i = 0; i < 5; ++i) {
        cin >> t;
        insert(t, sizel(ptl), ptl);
    }
    cout << "The list looks like a stack\n\n";
    traversel(ptl, display);
    cout << "The size of the list is: " << sizel(ptl) << endl;
    insert(9, 2, ptl);
    cout << "The size of the list is: " << sizel(ptl) << endl;
    int temp;
    deletei(&temp, 2, ptl);
    cout << temp <<endl ;
    traversel(ptl, display);
    cout << "The size of the list is: " << sizel(&l) << endl;
    int t2;
    retrieve(&t2, 2, ptl);
    cout << t2 << endl;
    replace(4, 1, ptl);
    traversel(ptl, display);
    destroyl(ptl);
    cout << "The size of the list is: " << sizel(ptl) << endl;
    return 0;
}

感谢您抽出宝贵时间帮助我。

【问题讨论】:

    标签: c++ list exception data-structures runtime-error


    【解决方案1】:

    您使用了ptl,它指向l,而没有初始化l

    像这样添加初始化:

    int main() {
        list l;
        list* ptl = &l;
        int t;
        createl(ptl); // add initialization
        cout << "Put 5 elements:\n";
        for (int i = 0; i < 5; ++i) {
            cin >> t;
            insert(t, sizel(ptl), ptl);
        }
    

    【讨论】:

    • 我也使用了 &l 而没有初始化 ptl 并且有同样的问题,我创建了(使用数组实现的堆栈和队列)但没有遇到这个问题,所以你能为我提供一个解决方案吗。跨度>
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2021-06-04
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多