第15次循环后出现链表运行时错误
Linked List Runtime Error after 15th Loop
我在链表上的插入有问题。这是我的代码:
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,所以链表应该包含单词数组中的所有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
关键字将为结构以及其中包含的任何对象引用分配内存
另请参见此处
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 对单向链表进行排序时出现运行时错误
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- std :: list(双重链接列表)未知运行时错误
- 双链表的运行时错误
- 对双向链表进行排序会产生运行时错误
- 创建对链表向量时 Gnu 编译器的错误:无效使用"::"
- 尝试打印链表时出现运行时错误
- 在链表运行时插入节点错误
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误
- 释放链表节点时出现分段错误
- 第15次循环后出现链表运行时错误
- 尝试创建链表堆栈时出现链接器错误
- 类链接列表模板运行时错误
- 我想在我的代码中实现一个双重循环链表 - 运行时错误
- 链表重载运算符 = 运行时错误
- 使用nVIDIA编译器为我的GNU编译器生成要链接的共享库时发生运行时错误
- 为什么链接库的顺序会导致运行时错误
- 链表中出现运行时错误