запись байтов в файл .Bin

У меня есть вектор в C ++, который я хочу записать в файл .bin.
тип этого вектора byteи число байтов может быть огромным, может быть, миллионы.
Я делаю это так:

if (depthQueue.empty())
return;

FILE* pFiledep;

pFiledep = fopen("depth.bin", "wb");

if (pFiledep == NULL)
return;

byte* depthbuff = (byte*) malloc(depthQueue.size() * 320 * 240 * sizeof(byte));

if(depthbuff)
{
for(int m = 0; m < depthQueue.size(); m++)
{
byte b = depthQueue[m];
depthbuff[m] = b;
}

fwrite(depthbuff, sizeof(byte),
depthQueue.size() * 320 * 240 * sizeof(byte), pFiledep);
fclose(pFiledep);
free(depthbuff);
}

depthQueue мой вектор, который содержит байты и допустим, его размер составляет 100 000.
Иногда я не получаю эту ошибку, но файл bin пуст.
Иногда я получаю кучу ошибок.
Иногда, когда я отлаживаю это, кажется, что malloc не выделяет место.
Проблема в космосе?

Или порция последовательной памяти такая длинная, и она не может писать в мусорную корзину?

0

Решение

Вам вряд ли нужно что-либо из этого. vector содержимое гарантированно будет непрерывным в памяти, поэтому вы можете просто написать из него напрямую:

fwrite(&depthQueue[0], sizeof (Byte), depthQueue.size(), pFiledep);

Обратите внимание на возможную ошибку в вашем коде: если вектор действительно vector<Byte>, затем вы не следует умножить его размер на 320 * 240.

РЕДАКТИРОВАТЬ: Больше исправлений для fwrite() вызов: 2-й параметр уже содержит sizeof (Byte) фактор, так что не делайте это умножение снова в 3-м параметре (хотя sizeof (Byte) вероятно 1, так что это не имеет значения).

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector