Ich bin ziemlich neu in der Programmierung und habe Speicherprobleme mit meinem Programm. Irgendwo übernehme ich zu viel Speicher, kann aber die Quelle nicht finden. Ich verstehe nicht, warum es Probleme mit der malloc-Zuweisung gibt, da ich keine Variablen dynamisch zuweise. DankeC++ malloc() Speicherbeschädigung (schnell)
//returns the index of the character in the string
int find(string line, int begin, int end, char character) {
for (int i = begin; i <= end; i++) {
if (line[i] == character) {
return i;
}
}
//return -1 if not found
return -1;
}
//Get the characters from levelorder that align with inorder
char* getCharacters(char inOrder[], char levelOrder[], int a, int b) {
char *newLevelOrder = new char[a];
int j = 0;
for (int i = 0; i <= b; i++)
if (find(inOrder, 0, a-1, levelOrder[i]) != -1)
newLevelOrder[j] = levelOrder[i], j++;
return newLevelOrder;
}
//creates a new Node given a character
Node* newNode(char character) {
Node *node = new Node;
node->character = character;
node->left = NULL;
node->right = NULL;
return node;
}
//creates the huffman tree from inorder and levelorder
Node* createInLevelTree(char inOrder[], char levelOrder[], int beginning, int end, int size) {
//if start index is out of range
if (beginning > end) {
return NULL;
}
//the head of the tree is the 1st item in level order's traversal
Node *head = newNode(levelOrder[0]);
//if there are no children we can't go farther down
if (beginning == end) {
return head;
}
//get the index of the node
int index = find(inOrder, beginning, end, head->character);
//get the subtree on the left
char *leftTree = getCharacters(inOrder, levelOrder, index, size);
//get the subtree on the right
char *rightTree = getCharacters(inOrder + index + 1, levelOrder, size-index-1, size);
//branch off to the left and right
head->left = createInLevelTree(inOrder, leftTree, beginning, index-1, size);
head->right = createInLevelTree(inOrder, rightTree, index+1, end, size);
//delete
delete [] leftTree;
delete [] rightTree;
return head;
}
Mit dieser Linie behoben. Danke Sam. Char * neue Ebene order = new char [b]
Dies ist ein typisches Ergebnis von unsicheren Programmierpraktiken. getCharacters() weist ein Array mit der Länge "a" zu, aber der folgende Code kann anscheinend so viele wie "b" Zeichen in das neue Array eingefügt werden. Eine Überprüfung, dass "b" nicht "a" überschreitet, ist jedoch nicht in Sicht. Wer weiß. Vielleicht ist es weniger, vielleicht ist es mehr, wir drücken nur die Daumen und hoffen, dass wir genügend Speicher zugewiesen haben. –
Welche Speicherprobleme haben Sie? – user1354033
"Ich bin nicht dynamisch zuzuweisen" ist eine fett formatierte Anweisung für ein Programm, das sowohl 'new char [a]' als auch 'new Node' enthält. – molbdnilo