我在一个相对基础的编程课程中,并且遇到了从未遇到过的错误。是这样的:

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/

10-11 22:58