下面的代碼嘗試使用fwrite將數據流保存到文件。第一個使用malloc的例子可以工作,但第二個例子中數據流是%70損壞的。有人可以向我解釋爲什麼第二個示例已損壞,我該如何補救它?使用memcpy和malloc導致數據流損壞
short int fwBuffer[1000000];
// short int *fwBuffer[1000000];
unsigned long fwSize[1000000];
// Not Working *********
if (dataFlow) {
size = sizeof(short int)*length*inchannels;
short int tmpbuffer[length*inchannels];
int count = 0;
for (count = 0; count < length*inchannels; count++)
{
tmpbuffer[count] = (short int) (inbuffer[count]);
}
memcpy(&fwBuffer[saveBufferCount], tmpbuffer, sizeof(tmpbuffer));
fwSize[saveBufferCount] = size;
saveBufferCount++;
totalSize += size;
}
// Working ***********
if (dataFlow) {
size = sizeof(short int)*length*inchannels;
short int *tmpbuffer = (short int*)malloc(size);
int count = 0;
for (count = 0; count < length*inchannels; count++)
{
tmpbuffer[count] = (short int) (inbuffer[count]);
}
fwBuffer[saveBufferCount] = tmpbuffer;
fwSize[saveBufferCount] = size;
saveBufferCount++;
totalSize += size;
}
// Write to file ***********
for (int i = 0; i < saveBufferCount; i++) {
if (isRecording && outFile != NULL) {
// fwrite(fwBuffer[i], 1, fwSize[i],outFile);
fwrite(&fwBuffer[i], 1, fwSize[i],outFile);
if (fwBuffer[i] != NULL) {
// free(fwBuffer[i]);
}
fwBuffer[i] = NULL;
}
}
你試圖讓這個代碼昨天在[this]中調試(http://stackoverflow.com/questions/10919377/malloc-free-in-this-code-crashing-why#comment14241485_10919377)的問題。我向你保證memcpy和malloc不是你問題的原因。建議您重寫代碼並減少問題的大小,而不是隻是在不同的僞裝下反覆發佈相同的問題。 – wadesworld
我想知道爲什麼人們在爲MacOS/iOS編碼時完全忽略C++ ...是的,Objective-C和C++並不完全是「朋友」,但使用STL在低級別管理內存要容易得多。例如,在你的代碼中,你「發明了一個輪子」,與std :: vector非常相似。 – Gobra
Wadesworld,這是一個不同的問題(同一個項目)與已更正的線程相關,但thx。另外memcpy在另一篇文章中沒有任何地方。 – user1440367