0

.bin ファイルに書き込みたい C++ のベクトルがあります。このベクトルの型は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 がスペースを割り当てていないように見えることがあります。問題はスペースですか?

それともシーケンシャルメモリのチャンクが長すぎてビンに書き込めないのでしょうか?

4

1 に答える 1

2

そんなものはほとんど必要ありません。 vectorコンテンツはメモリ内で連続していることが保証されているため、そこから直接書き込むことができます。

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

コードの潜在的なバグに注意してください: ベクトルが実際vector<Byte>に である場合、そのサイズに 320*240 を掛けるべきではありません。

編集:fwrite()呼び出しに対するその他の修正: 2 番目のパラメーターには既にsizeof (Byte)係数が含まれているため、3 番目のパラメーターでもその乗算を再度実行しないでください (sizeof (Byte)おそらく 1 であるため、問題ではありません)。

于 2012-11-18T05:57:12.260 に答える