gpt4 book ai didi

c++ - 第 15 次循环后的链表运行时错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:24 26 4
gpt4 key购买 nike

我在链接列表中插入时遇到问题。这是我的代码:

    for(j = 0; j < SIZE; j++) {
body = (textFile*) malloc (sizeof(textFile));
body->word = words[index[j]];
if(head == NULL) {
head = tail = body;
}
else {
tail->next = body;
tail = body;
cout << tail->word << endl;
}
}

这里发生的事情是程序在我的链表上显示第 15 个元素后崩溃了……我不知道为什么。 index 声明为 index[20] = {0}; SIZE 定义为 20,因此链表应该包含 words 数组中的所有 20 个单词。可能的原因是什么?会不会是内存分配?提前致谢:)

这是我的更多代码。抱歉,我有点不好意思发布它,我不擅长代码优雅。对不起。

    #include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <cstdlib>
#define SIZE 20

using namespace std;

struct textFile {
string word;
struct textFile *next;
};

textFile *head, *body, *tail, *temp;

int main() {
ifstream wordFile("WORDS.txt", ios::in); // file object constructor
/* stores words in the file into an array */
string words[SIZE];
char pointer;
int i;
for(i = 0; i < SIZE; i++) {
while(wordFile >> pointer) {
if(!isalpha(pointer)) {
pointer++;
break;
}
words[i] = words[i] + pointer;
}
}
/* stores the words in the array to a randomized linked list */
srand(time(NULL));
int index[SIZE] = {0}; // temporary array of index that will contain randomized indexes of array words
int j = 0, ctr;
// assigns indexes to array index
while(j < SIZE) {
i = rand() % SIZE;
ctr = 0;
for(int k = 0; k < SIZE; k++) {
if(!i)
break;
else if(i == index[k]) { // checks if the random number has previously been stored as index
ctr = 1;
break;
}
}
if(!ctr) {
index[j] = i; // assigns the random number to the current index of array index
j++;
}
}
/* makes sure that there are no double zeros on the array */
ctr = 0;
for(i = 0; i < SIZE; i++) {
if(!index[i])
ctr++;
}
if(ctr > 1) {
int temp[ctr-1];
for(j = 0; j < ctr-1; j++) {
for(i = 0; i < SIZE; i++) {
if(!index[i]) {
int ctr2 = 0;
for(int k = 0; k < ctr-1; k++) {
if(i == temp[k])
ctr2 = 1;
}
if(!ctr2)
temp[j] = i;
}
}
}
j = ctr - 1;
while(j > 0) {
i = rand() % SIZE;
ctr = 0;
for(int k = 0; k < SIZE; k++) {
if(!i || i == index[k]) {
ctr = 1;
break;
}
}
if(!ctr) {
index[temp[j-1]] = i;
j--;
}
}
}
head = tail = body = temp = NULL;
for(j = 0; j < SIZE; j++) {
body = (textFile*) malloc (sizeof(textFile));
body->word = words[index[j]];
if(head == NULL) {
head = tail = body;
}
else {
tail->next = body;
tail = body;
cout << tail->word << endl;
}
}
temp = head;
while(temp != NULL) {
cout << temp->word << endl;
temp = temp->next;
}
return 0;
}

最佳答案

问题在于您初始化主体结构的方式:

body = (textFile*) malloc (sizeof(textFile));

字符串未初始化,当您尝试分配给它时会导致段错误。您应该改用 C++ new 关键字:

body = new textFile;

new 关键字将为结构以及其中包含的任何对象引用分配内存。

另见 here

关于c++ - 第 15 次循环后的链表运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575912/

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