gpt4 book ai didi

c++ - 段错误 C++

转载 作者:行者123 更新时间:2023-11-28 08:06:54 26 4
gpt4 key购买 nike

我收到“段错误(核心已转储)”运行时错误,代码如下:

#include <iostream>
#include "Student.h"
#include "SortedList.h"

using namespace std;

#define BOUNDS 100

int main() {

SortedList *list = new SortedList(); // points to the sorted list object
Student *create[BOUNDS]; // array to hold 100 student objects
int num = 100000; // holds different ID numbers

// fills an array with 100 students of various ID numbers
for (int i = 0; i < BOUNDS; i++) {
create[i] = new Student(num);
num += 10;
}

// insert all students into the sorted list
for (int i = 0; i < BOUNDS; i++)
list->insert(create[i]);

// individually deletes each student
num = 100000;
for (int i = 0; i < BOUNDS; i++) {
delete list->find(num);
num += 10;
}

// insert all students into the sorted list
for (int i = 0; i < BOUNDS; i++)
list->insert(create[i]);

num = 100000;
for (int i = 0; i < BOUNDS; i++) {
list->remove(num);
num += 10;
}

cout << "test2" << endl;
delete list;
return 0;
}

我已将错误缩小到 delete list; 行(或先到者)。我只是想知道这是为什么以及如何解决它。对此事的任何见解都是有用的。

最佳答案

我可以看到你有两个问题。

首先,在这个循环中:

for (int i = 0; i < BOUNDS; i++) {
x = new Student(num);
num += 10;
}

您正在创建一堆动态 Student 并将最新的放在 x 中,而前一个丢失了。这将动态创建 100 个 Student,其中 99 个被泄露。此外,它不会像上面的评论所说那样用 Student 填充数组。我不确定你想在这里做什么,所以我不能评论你需要做什么。

其次,您在这里调用delete:

delete list->find(num);

在自动存储(堆栈)中的 Student 上(因为您在列表中填充了指向 create 中的 Student 的指针它包含自动 Students),这会导致未定义的行为,并且可能是您的段错误的原因。您不需要释放这些 Student,因为当数组在 main 结束时超出范围时它们将被释放。

关于c++ - 段错误 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com