В моей программе мне нужно создать связанный список, но размер списка (количество узлов) определяется во время компиляции. «newcustomer.numT» - это количество узлов, которые будут созданы. Чтобы сделать это, я подумал, что у меня должен быть массив указателей, тогда я бы запросил память из кучи каждым указателем. НО, к сожалению, я также не знаю размер массива. Я создал его динамически. «transactionn» - это структура, которая содержит значения в одном узле.Критическая ошибка, обнаруженная при распределении с кучи
transactionn **asd;
asd = new transactionn*[newcustomer.numT]; //I created array of pointers
for (int k = 0; k<newcustomer.numT; k++){
asd[k] = new transactionn; //Allocating a node for each pointer in the array
} //End of the "node creating"
newcustomer.trahead = asd[0]; //Assign head to the first node
//Connecting nodes in the linked list to eachother
for (int z = 0; z < (newcustomer.numT)-1; z++){
asd[z]->next = asd[z + 1];
}
asd[newcustomer.numT]->next = NULL; //Set the next of the last node to NULL
Когда я скомпилировать его, нет никакой ошибки в списке ошибок, но на выходе я получаю это:
Critical error detected c0000374
DataHomework2.exe has triggered a breakpoint.
И это вызывает точку останова в этой строке:
asd[k] = new transactionn;
Что я делаю неправильно?
Edit: я исправил последний индекс, когда так:
asd[(newcustomer.numT)-1]->next = NULL;
Когда я компилирую эти коды в качестве одной целой программы, нет никакой ошибки и программа не откажет. Когда я реализую эту функцию, моя основная программа проекта снова сработает. Критическая ошибка.
Edit2: Эти строки были правильными. Источник ошибки был вызван значениями, которые они получают от других функций.
Это означает «Куча повреждена». Стандартная ошибка, когда вы бросаете необработанные указатели, ошибка находится в другом месте. –
Так нет ли ошибки в этих строках? @HansPassant –