抛出异常:写访问冲突

问题描述

我正在尝试实现一个列表结构,但是当我编写了在列表中的特定位置插入一个元素的 insert() 函数时,我收到一个错误 抛出的异常:写访问冲突。 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*,list*); 
void traversel(list*,void (*)(int));
void retrieve(int*,list*);
void replace(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,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,list* pl) {
    *pe = pl->entry[p];
}


void replace(int e,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,ptl);
    cout << temp <<endl ;
    traversel(ptl,display);
    cout << "The size of the list is: " << sizel(&l) << endl;
    int t2;
    retrieve(&t2,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;
}

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

解决方法

您使用了 /path/to/docker/compose/app,它指向 ptl,而没有初始化 l

像这样添加初始化:

l