Delete[] повреждает будущие выделения памятиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Delete[] повреждает будущие выделения памяти

Сообщение Anonymous »

Я пытаюсь прочитать два двоичных файла и сравнить их, чтобы убедиться, что они одинаковы.
Есть много способов сделать это, я использую только самый простой из них. потому что это всего лишь скрипт проверки, который проверяет идентичность созданных мною файлов.
Из предыдущих тестов я знаю, что используемые мной двоичные файлы абсолютно одинаковы.
Проблема в следующем:
Когда я открываю первый раз 2 файла, сохраните их в виде char*, затем сравните, все в порядке.
Я могу открыть вторую пару файлов и потом сравнить.
Но если я использую удаление в буферах для первых двух файлов что-то вроде

Код: Выделить всё

delete[] fileOneBuffer
delete[] fileTwoBuffer
Затем я пытаюсь сравнить вторую пару файлов и получаю сообщение об ошибке, сообщающее, что они не совпадают.
Я печатаю байты и последние 2 байта символа размером 4 МБ* кажутся разными.
Пример кода:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

using namespace std;

bool compareBinaries(char* firstBuffer, int firstBufferLen, char* secondBuffer, int secondBufferLen) {
if (firstBufferLen != secondBufferLen) {
return false;
}
for (int i = 0; i < firstBufferLen; i++) {
if (firstBuffer[i] != secondBuffer[i]) {
return false;
}
}
return true;
}

char* read(string filePath){
ifstream file(filePath, ios::binary);
long fileSize = filesystem::file_size(filePath);
char* buffer = new char[fileSize];
file.read(buffer, fileSize);
file.close();
return buffer;
}

long fileSizeOf(string filePath){
long fileSize = filesystem::file_size(filePath);
return fileSize;
}

void deleteBuffer(char* buffer) {
delete[] buffer;
}

int main() {
char* fileOneBuffer = read("path1.bin");
char* fileTwoBuffer = read("path2.bin");

cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79333409/delete-corrupts-future-memory-allocations[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»