从堆分配时检测到严重错误

时间:2015-10-30 09:53:56

标签: c++ dynamic linked-list heap access-violation

在我的程序中,我需要创建一个链表,但是在编译期间定义了列表的大小(节点数)。 " newcustomer.numT" variable是要创建的节点数。    为此,我认为我应该有一个指针数组,然后我会通过每个指针从堆中请求内存。但不幸的是,我也不知道阵列的大小。我也动态创建了它。 " 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;

我做错了什么?

编辑:我更正了最后一个索引:

asd[(newcustomer.numT)-1]->next = NULL;

当我将这些代码编译为一个完整的程序时,没有错误,程序也不会崩溃。当我实现这个功能到我的主项目程序再次崩溃。严重错误。

Edit2:这些行是正确的。错误的来源是由于他们从其他函数获得的值。

1 个答案:

答案 0 :(得分:3)

asd = new transactionn*[newcustomer.numT];    //I created array of pointers
//...
asd[newcustomer.numT]->next = NULL; //Set the next of the last node to NULL

你溢出了数组。 asd指向的最后一个数组索引是newcustomer.numT - 1

相关问题