因此,当我调试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
。
虽然我能够找出原始源代码中的错误并提取出来,但我无法找出是什么原因引起的以及如何解决。
软件工程中是否包含一些魔术?
你找出其余的!
答案 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
。