Heap_alloc debug error

0

Witam przy dodawaniu do drzewa ktoregos elementu z rzedu debug wyrzuca mi blad w malloc.c

__forceinline void * __cdecl _heap_alloc (size_t size)

{

    if (_crtheap == 0) {
        _FF_MSGBANNER();    /* write run-time error banner */

        _NMSG_WRITE(_RT_CRT_NOTINIT);  /* write message */
        __crtExitProcess(255);  /* normally _exit(255) */
    }

    return HeapAlloc(_crtheap, 0, size ? size : 1);
}
 

Struktura klasy:

 
struct node
{
  char *key_value;
  char *value;
  node *left;
  node *right;
};

class btree
{
    public:
        btree();
	int compare;
        void insert(char *key, char *value);
        node *search(char *key);

    private:
        void insertNew(char *key,char *value, node *leaf);
        node *search(char * key, node *leaf);
        
        node *root;
};

btree.cpp

 
void btree::insert(char* key, char *value)
{
  if(root!=NULL)
    insertNew(key, value, root);
  else
  {
    root=new node;
    root->key_value=key;
	root->value=value;
    root->left=NULL;
    root->right=NULL;
  }
}
void btree::insertNew(char* key, char *value, node *leaf)
{
  compare = strcmp(key,leaf->key_value);
  if(compare < 0)
  {
    if(leaf->left!=NULL)
     insertNew(key,value, leaf->left);
    else
    {
      leaf->left=new node;
      leaf->left->key_value=key;
	  leaf->left->value=value;
      leaf->left->left=NULL;   
      leaf->left->right=NULL;   
    }  
  }
  else if (compare >= 0 )
  {
    if(leaf->right!=NULL)
      insertNew(key,value, leaf->right);
    else
    {
      leaf->right=new node;
      leaf->right->key_value=key;
      leaf->right->value=value;
      leaf->right->left=NULL;  
      leaf->right->right=NULL; 
    }
  }
}

Z tego co udalo mi sie zdebugowac program zatrzymuje sie przy n-tym dodaniu elementu :

leaf->right=new node; 
0

Takie rzeczy się zdarzają wtedy kiedy wcześniej zwolniłeś coś czego nie przydzielałeś.

0

Hmm nigdzie nie implementuje usuwania dodanych elementow.
Poki co w konstruktorze:

root = NULL

Destruktor stoi pusty
W kodzie nie ma operatora

delete 
0

pokaż jak dodajesz.

0

Mam klase ktora dziedziczy po btree, w .h tworze

 
struct {
...
}
class MojaKlasa 
{
	public:
		btree tree;
}

.cpp

 
void MojaKlasa::DodajDoDrzewa() {
	char *key;
	char *value;	
	cin >> key;
	cin >> value;
	tree.insert(key,value);
}
1
XYZY napisał(a):
 
void MojaKlasa::DodajDoDrzewa() {
	char *key;
	char *value;	
	cin >> key;
	cin >> value;
	tree.insert(key,value);
}

Musisz zaalokować pamięć przed wczytaniem danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1