无法访问数组内部地址处的内存

时间:2019-12-25 21:05:31

标签: c segmentation-fault gdb

我正试图回到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,参数为:

  1. SNDFILE结构
  2. 浮点指针
  3. 要从文件读取到缓冲区的元素数。

我的机器是64位的Ubuntu。为什么我会遇到细分错误?

谢谢。

0 个答案:

没有答案