1

OSX で Libsndfile ベースのオーディオ アプリを作成しているときに奇妙な問題に遭遇しました。読み取りおよび書き込みバッファーのデータが、奇妙で予測できない方法で破損しました。

これは私のために問題を再現する短いプログラムです:

#include <iostream>
#include "sndfile.h"

int main(int argc, const char * argv[])
{
float* buffer = (float*)malloc(4096*sizeof(float));
SNDFILE* file;
SF_INFO infos;
infos.format = 0;
file = sf_open("ABCD.WAV",SFM_READ,&infos);
if (file==NULL)
{
    std::cout << "LIBSNDFILE ERROR: " << sf_strerror(file) << "\n";   
}

int samplesread=1;
while (samplesread!=0)
    {
        samplesread = sf_readf_float(file,buffer,4096);
        std::cout << " " << samplesread;
    }
std::cout << "";
sf_close(file);
free(buffer);
return 0;
}

プログラムは正常にコンパイルおよび実行されますが、Valgrind で実行すると、次のようなエラーが表示されます。

==933== Invalid write of size 8 
==933==    at 0x56EF4B: _platform_bzero$VARIANT$Merom (in    /usr/lib/system/libsystem_platform.dylib)
==933==    by 0x2FDBB: psf_memset (in /opt/local/lib/libsndfile.1.dylib)
==933==    by 0x11E0B: sf_readf_float (in /opt/local/lib/libsndfile.1.dylib)
==933==    by 0x100001323: main (in ./sndfiletest)
==933==  Address 0x873270 is 0 bytes after a block of size 16,384 alloc'd
==933==    at 0x4711: malloc (vg_replace_malloc.c:296)
==933==    by 0x100001287: main (in ./sndfiletest

事前に助けてくれてありがとう-T

4

2 に答える 2

0

wav ファイルはおそらくステレオです。次に、バッファサイズは 4096 * 2 にする必要があります

于 2015-11-22T15:04:29.900 に答える