EDIT: Я получил решение и поставил свой новый код ниже. Спасибо за вашу помощь!Что это за ошибка? Test: malloc.c: 2388: sysmalloc: Assertion ... failed "
У меня есть массив нулевых указателей, и я пытаюсь установить элемент массива в определенный индекс, чтобы указать на объект класса, я создал, но я в конечном итоге с этой ошибкой:
test: malloc.c:2388: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Код:
Trie::Trie() {
word = false;
for(int i=0; i<26; i=i+1) {
children[i]={NULL};
}
}
Trie::~Trie() {
for(int i=0; i<26; i=i+1) {
delete children[i];
}
}
Trie::Trie(const Trie &obj) {}
void Trie::addWord(string word) {
//Subtract 97 to turn character into index
//Once word is empty then we need to set the node to true
cout << word << " was seen\n";
char first = word.at(0);
int index = first - 97;
string stringToSend = word.substr(1);
Trie * currentNode = children[index];
if(stringToSend.empty()) {
this -> word = true;
return;
}
if(currentNode == NULL) {
currentNode = new Trie();
}
currentNode ->addWord(stringToSend);
}
Вот Trie.h
#include <iostream>
#include <vector>
using namespace std;
class Trie {
//Data Variables
//char value;
bool word;
Trie* children[26];
public:
Trie(); //Constructor
Trie(const Trie &obj);
~Trie(); //Deconstructor
void addWord(string);
bool isWord(string);
vector<string> allWordsWithPrefix(string);
};
Отладчик будет отслеживать точную строку, которая вызывает проблему, если вы пройдете через код. Какая строка генерирует эту ошибку? –
Вам не хватает определения 'class Trie'. Таким образом, нет никакой полезной информации о том, что такое «дети». – TBBle
Если вы хотите инициализировать 26 элементов массива с помощью 'children [26] = {NULL};', это совершенно неправильно. Это меняет только 26-й элемент. Чтобы изменить весь массив, используйте цикл или, еще лучше, стандартный контейнер, такой как вектор. – iksemyonov