Je rencontre un problème étrange dans la désallocation de la mémoire.Segfault pendant la désallocation du tableau C++
J'ai le code suivant pour MemoryPartition de classe:
#include <cstring>
#include <iostream>
#include "memorypartition.h"
MemoryPartition::MemoryPartition(int maxSize) {
this->partitionArray = new char[maxSize];
memset(this->partitionArray, ((int) '$'), maxSize);
this->maxSize = maxSize;
this->isFree = true;
}
MemoryPartition::~MemoryPartition() {
delete[] this->partitionArray;
this->partitionArray = NULL;
maxSize = 0;
}
void MemoryPartition::setFree(bool isFree) {
this->isFree = isFree;
}
bool MemoryPartition::getFree() {
return this->isFree;
}
int MemoryPartition::getMaxSize() {
return this->maxSize;
}
void MemoryPartition::getPartitionArray() {
for(int i = 0;i < maxSize;i++) {
std::cout << partitionArray[i] << ' ';
}
std::cout << std::endl;
}
et le code suivant pour memoryManager-:
#include "memorymanager.h"
#include <iostream>
#include <cstdlib>
MemoryManager::MemoryManager() {
}
MemoryManager::~MemoryManager() {
memory.clear();
}
void MemoryManager::defmem(int bytes) {
MemoryPartition *memPartition;
int maxMemorySize = bytes;
while(maxMemorySize != 0) {
int partitionSize = this->randomPartitionSize(maxMemorySize);
memPartition = new MemoryPartition(partitionSize);
this->memory.push_back(*memPartition);
std::cout << memPartition->getMaxSize() << std::endl;
memPartition->getPartitionArray();
maxMemorySize -= partitionSize;
delete memPartition;
memPartition = NULL;
}
}
int MemoryManager::randomPartitionSize(int maxSize) {
int value;
srand(time(NULL));
value = (rand() % maxSize) + 1;
return value;
}
et je suis obtenir un bizarre à supprimer [] dans MemoryPartition destructor. Valgrind me dit qu'il y a 13 libres et 10 allocs, mais je ne vois pas pourquoi cette delete [] s'appellerait 3x.
Quelqu'un a vu le problème que je ne pouvais pas comprendre?
Merci d'avance.
[] 's,
Eh bien le problème n'est pas dans ce code. Postez le code où MemoryPartition est utilisé et peut-être que nous pouvons vous aider. – Goz
Peut-être que vous devez définir votre constructeur de copie et l'opérateur d'affectation de copie? –
Le problème doit se produire ailleurs. Est-ce que Valgrind signale une corruption de tas? Existe-t-il ailleurs où vous allouez/libérez le 'partitionArray' –