Je reçois erreur de "Double gratuit ou corruption (out)" après que j'imprime ma sortie. Mais cette erreur ne vient que pour les petites entrées. Pour les grandes entrées, le programme ne lance pas cette erreur. Lorsque je crée les tableaux multidimensionnels à l'intérieur du principal et les supprime, je ne reçois pas l'erreur. J'ai seulement posté la partie du code qui est pertinente à cette question ici. S'il vous plaît veuillez expliquer comment résoudre le problème.C++ double gratuit ou corruption (out) erreur
#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;
}
'pour (int i = 1; i <= noItems; i ++)', est en train de sortir de la plage de tableau. – songyuanyao
vous dites dans le destructeur? – jstandshigh
Oui, et dans 'getInputs()'. Pour 'weightArray = new int [noItems];', vous devriez l'itérer par 'for (int i = 0; i
songyuanyao