【问题标题】:Critical error detected while allocating from heap [closed]从堆分配时检测到严重错误[关闭]
【发布时间】:2016-01-30 17:00:18
【问题描述】:

在我的程序中,我需要创建一个链表,但链表的大小(节点数)是在编译时定义的。 “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;

我做错了什么?

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

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

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

Edit2 :这些行是正确的。错误的根源在于它们从其他函数中获得的值。

【问题讨论】:

  • 这意味着“堆损坏”。当您抛出原始指针时的标准错误当然,该错误位于其他地方。
  • 那么这些行没有错吗? @HansPassant

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


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 2018-09-28
    • 2014-06-21
    • 2016-07-22
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多