У меня есть вектор в 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 не выделяет место.
Проблема в космосе?
Или порция последовательной памяти такая длинная, и она не может писать в мусорную корзину?
Вам вряд ли нужно что-либо из этого. vector
содержимое гарантированно будет непрерывным в памяти, поэтому вы можете просто написать из него напрямую:
fwrite(&depthQueue[0], sizeof (Byte), depthQueue.size(), pFiledep);
Обратите внимание на возможную ошибку в вашем коде: если вектор действительно vector<Byte>
, затем вы не следует умножить его размер на 320 * 240.
РЕДАКТИРОВАТЬ: Больше исправлений для fwrite()
вызов: 2-й параметр уже содержит sizeof (Byte)
фактор, так что не делайте это умножение снова в 3-м параметре (хотя sizeof (Byte)
вероятно 1, так что это не имеет значения).
Других решений пока нет …