我正试图回到C编写一个小程序,但是我在指针方面苦苦挣扎:
float carry[cinfo.channels * cinfo.frames];
float mod[minfo.channels * minfo.frames];
float outbuffer[minfo.channels * minfo.frames];
float *mono;
readcount = sf_read_float(mfile, mod, minfo.channels * minfo.frames);
在声明所有数组后,尝试使用 sf_read_float 时,出现分段错误。使用 gdb 进行调试并尝试查看 mod 变量下的内容时,答案为0x7ffffd9c0820: Cannot access memory at address 0x7ffffd9c0820
。声明的每个其他数组也是如此(但具有不同的内存地址)。尝试打印 mod 时,我得到了value requires 1179648 bytes, which is more than max-value-size
,这似乎是正确的,因为
minfo.frames * minfo.channels = 294912 ,并且我的计算机中的float大小为4个字节。如果我执行mod[0] = 0;
或float test = mod[0]
,也会出现此段错误;
sf_read_float
来自libsndfile
,参数为:
我的机器是64位的Ubuntu。为什么我会遇到细分错误?
谢谢。