问题描述
我正在尝试实现一个列表结构,但是当我编写了在列表中的特定位置插入一个元素的 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];
}*/
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