为什么输入96时会出现段错误?

时间:2019-10-24 09:37:21

标签: c segmentation-fault command-line-interface

因此,当我调试CLI时,似乎我的代码并没有真正采用简单的整数!

#include <stdio.h>
int main(int argc, char **argv){
        int crap = atoi(argv[1]);
        const int SAMPLES = 44100*crap;
        int d = SAMPLES;
        short waveform[SAMPLES];
        printf("debug %d\n", crap);
}

如果我尝试运行./bin 95,则该软件可以正常运行,但是在尝试./bin 96时,它会改变我对CRAP的看法。 (它将打印segmentation fault。 虽然我能够找出原始源代码中的错误并提取出来,但我无法找出是什么原因引起的以及如何解决。 软件工程中是否包含一些魔术?  你找出其余的!

1 个答案:

答案 0 :(得分:4)

使用参数95时,数组waveform的大小为44100 * 95 * 2 = 7.99 MB,对于96为8.07 MB。您可以在堆栈上分配此数组,大多数Linux安装中的默认堆栈大小为8 MB。

尝试使用动态分配:

short* waveform = malloc(SAMPLES*sizeof(short));

另请参阅ulimit -s