我在一个相对基础的编程课程中,并且遇到了从未遇到过的错误。是这样的:
Debug Assertion Failed!
Program:...sual Studio 2010\Projects\Comp Project\Debug\Comp Project.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp
Line: 52
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
这是我的代码,当分配的内存被删除时,错误弹出
//Shortest Path Version 1.01 IN PROGRESS
/*
This program reads in node and arc data and interpretes it into a list which it can then use
to calculate the shortest time or distance, depending on user prefrence, between two chosen
nodes and send pack the path to the user
*/
#include <conio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
//opening the files where the data is contained.
ifstream arcfile;
ifstream nodefile;
arcfile.open("G:\\Programming\\Descrete Structures\\arcs2011.txt");
nodefile.open("G:\\Programming\\Descrete Structures\\nodes2011.txt");
//creating a class that will store the data relevent to locating the shortest path
class Arc
{
public:
unsigned short int FROM; //from node
unsigned short int TO; //to node
double DISTANCE; //distance in miles
double TIME; //travel time
};
//creating a class that will store the data relavent to the node path
class Node
{
public:
unsigned long int WIEGHT; //either time or distance
unsigned short int FROM; //alternativly "via"
bool* shortestKnown;
};
string s; //placeholder for irrelavent string data
unsigned short int StartingNode; //user selected starting node
unsigned short int EndingNode; //user selected ending node
unsigned short int ARCSIZE = 0; //number of Arcs in arc file
unsigned short int NODESIZE = 0; //number of Nodes in node file
//////////////////////Begin reading in of Arc data and Node data/////////////////////
//count number of registered arcs
while(getline(arcfile,s))
{
ARCSIZE++;
}
cout<<ARCSIZE<<" line size of arcfile"<<endl;
//count number of registered nodes
while(getline(nodefile,s))
{
NODESIZE++;
}
NODESIZE++; //final incrementation for +1 format
cout<<NODESIZE<<" line size of nodefile"<<endl;
Arc* Arclist; //array that will store all the arcs
Arclist = new Arc[ARCSIZE]; //based on the size of the file
string* Nodelist; //array that will store the node names
Nodelist = new string[NODESIZE]; //based on the size of the file
//reset the streams
arcfile.close();
nodefile.close();
arcfile.open("G:\\Programming\\Descrete Structures\\arcs2011.txt");
nodefile.open("G:\\Programming\\Descrete Structures\\nodes2011.txt");
//loop through and save the arc data to an array
for(int i=1;i<ARCSIZE;i++)
{
arcfile.ignore(1000,'\n');
arcfile>>Arclist[i].FROM;
arcfile>>Arclist[i].TO;
arcfile>>Arclist[i].TIME;
arcfile>>Arclist[i].DISTANCE;
}
//loop through and store node description. Node counting starts at 1 to link up easier with
//the arcs. The NODESIZE has been increased by 1 to allow for this format.
for(int i=1;i<NODESIZE;i++)
{
getline(nodefile,Nodelist[i],'\t'); //store node data
nodefile.ignore(1000,'\n'); //ignore coordinates
}
//////////////////////Begin user interface portion of program////////////////////////////////
cout<<"Arcs and Nodes loaded."<<endl;
cout<<"Please select by node number a starting node and ending node."<<endl;
cout<<"(Press any key to display the list)"<<endl<<endl;
getch();
//print out the node list with numarical values
for(int i=1;i<NODESIZE;i++)
{
cout<<i<<" - "<<Nodelist[i]<<endl;
}
cout<<endl;
cout<<"Please select a starting node: ";
cin>>StartingNode;
cout<<endl<<"Please select an ending node: ";
cin>>EndingNode;
////////////////////////SOME KIND OF ERROR OCCURS PAST THIS POINT///////////////////////
//delete allocated memory
delete Arclist;
delete Nodelist;
getch();
}
最佳答案
这些:
delete Arclist;
delete Nodelist;
应该:
delete [] Arclist;
delete [] Nodelist;
或者更好的是,忘记使用动态分配的数组,而使用
std::vector
。关于c++ - 调试断言在删除已分配的内存时失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5872718/