我在链接列表中插入时遇到问题。这是我的代码:
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;
}
答案 0 :(得分:4)
问题在于初始化body结构的方式:
body = (textFile*) malloc (sizeof(textFile));
字符串未初始化,导致尝试分配时出现分段错误。您应该使用C ++ new
关键字:
body = new textFile;
new
关键字将为结构以及包含在其中的任何对象引用分配内存。
另见here