Я использую malloc или new в классе, чтобы получить переменную, а затем я получаю SIGABRT

Я использую malloc или new в классе, чтобы получить переменную, а затем я получаю SIGABRT, я тестирую malloc и new в других файлах cpp, это работает хорошо. Можете ли вы сказать мне причину: P
ошибка возникает в две строки: (в функции Trie :: Insert (char *))

int* pN = new int;

PNODE node = (PNODE)malloc(sizeof(struct NODE));

другие верны

весь код:

#define CHARSIZE 26
#include<assert.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct NODE {
char key;
struct NODE* child[ CHARSIZE ];
}* PNODE,*TRIE;

class Trie{
public:
Trie();
void Insert( char* sData );
void Show( );
void ShowTrie( PNODE root );
void Delete( struct NODE* pNode );
struct NODE* Search( char* sData );
void DeleteTrie();
~Trie();
private:
PNODE pRoot;
static char colls[];
};
char Trie::colls[] = "abcdefghijklmnopqrstuvwxyz ";
Trie::Trie(){
//root create
this->pRoot = NULL;
this->pRoot = (PNODE)malloc(sizeof(struct NODE));
this->pRoot->key = ' ';
for( int i=0; i<CHARSIZE+1; i++ ){
this->pRoot->child[ i ] = NULL;
}
}
void Trie::Insert( char* sData ){
//stick
if( sData==NULL || *sData == '\0' ){
return;
}
PNODE p = this->pRoot;

char* pData = sData;
//same error sigabrt ginal
int* pN = new int;
//still error
//PNODE node = (PNODE)malloc(sizeof(struct NODE));
while( *pData!='\0' ){
//如果对应位置的指针为空
if( p->child[ *pData-'a' ]==NULL ){
//make new Node
PNODE node = (PNODE)malloc(sizeof(struct NODE));

node->key = *pData;
int i = 0;
while( i < CHARSIZE ){
node->child[i] = NULL;
i++;
}
p->child[*pData-'a'] = node;
}

p = p->child[ *pData-'a' ];
pData++;
}
}
void Trie::Show( ){
ShowTrie( this->pRoot );
}
void Trie::ShowTrie( PNODE root ){
if( root==NULL ){
return;
}else{
cout<<root<<endl;
//cout<<root->key<<"    ";
for( int i=0; i<CHARSIZE; i++ ){
ShowTrie( root->child[i] );
}
}
}
void Trie::Delete( struct NODE* pNode ){

}
struct NODE* Search( char* sData ){return NULL;

}
Trie::~Trie(  ){}

trie.cpp

0

Решение

Вы получаете эту ошибку, потому что стек / куча повреждена. В конструкторе есть ошибка в цикле for:

`Trie :: Trie () {

for( int i=0; i<CHARSIZE+1; i++ ){ ***// should not +1, just i < CHARSIZE***

this->pRoot->child[ i ] = NULL;

}`

Когда куча повреждена, в отладочной версии при следующем выделении памяти произойдет исключение из-за проверки кучи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector