Ich bekomme Fehler von "Double frei oder Korruption (out)", nachdem ich meine Ausgabe drucke. Dieser Fehler tritt jedoch nur bei kleinen Eingaben auf. Bei größeren Eingaben wirft das Programm diesen Fehler nicht. Wenn ich die mehrdimensionalen Arrays im Hauptverzeichnis erstelle und lösche, erhalte ich den Fehler nicht. Ich habe hier nur den Teil des Codes veröffentlicht, der für dieses Problem relevant ist. Bitte erläutern Sie, wie Sie das Problem beheben können.C++ doppelt frei oder Korruption (out) Fehler
#include<iostream>
#include<vector>
using namespace std;
class Knapsack{
public:
int noItems, capacity, value, weight;
int *weightArray, *valueArray;
int **ValueMatrix, **BacktrackMatrix;
vector<int> itemsChosen;
~Knapsack();
void getInputs(); // reads in data
void findItems(); // calculates best value of items
void backTrack(int row, int col); // backtracks items selected
void print(); //prints out data
};
Knapsack::~Knapsack()
{
delete[] weightArray;
delete[] valueArray;
for(int i=1;i<=noItems;i++)
{
delete[] ValueMatrix[i];
}
delete[] ValueMatrix;
for(int i=1;i<=noItems;i++)
{
delete[] BacktrackMatrix[i];
}
delete[] BacktrackMatrix;
}
void Knapsack::getInputs()
{
cin>>noItems;
cin>>capacity;
weightArray=new int[noItems];
valueArray=new int[value];
for(int i=1;i<=noItems;i++)
{
cin>>value;
valueArray[i]=value;
}
for(int i=1;i<=noItems;i++)
{
cin>>weight;
weightArray[i]=weight;
}
ValueMatrix=new int*[noItems];
for(int i=1;i<=noItems;i++)
{
ValueMatrix[i]=new int[capacity+1];
}
BacktrackMatrix=new int*[noItems];
for(int i=1;i<=noItems;i++)
{
BacktrackMatrix[i]=new int[capacity+1];
}
}
int main()
{
Knapsack *knap=new Knapsack();
knap->getInputs();
knap->findItems();
knap->print();
delete knap;
return 0;
}
'für (int i = 1; i <= noItems; i ++)', verlässt den Array-Bereich. – songyuanyao
Sie sagen im Destruktor? – jstandshigh
Ja, und in 'getInputs()'. Für 'weightArray = new int [noItems];' sollten Sie es mit 'for (int i = 0; i
songyuanyao