【发布时间】:2017-01-24 16:57:45
【问题描述】:
我想填充一个最多 n 位斐波那契数列的数组。到目前为止,这是我所拥有的:
void fib(int **seq, int n){
seq = malloc(sizeof(int)*n);
if(n==1){
*seq[0] = 0;
}
if(n==2){
*seq[0] = 0;
*seq[1] = 1;
}
if(n>=3){
*seq[0] = 0;
*seq[1] = 1;
*seq[2] = 1;
for(int i=3; i<n; i++){
*seq[i] = *seq[i-1]+*seq[i-2];
}
}
}
我已经在 Python 中测试了基本算法,它按预期工作,但在 C 中我遇到了分段错误,我不确定这是从哪里来的。
任何帮助将不胜感激。
【问题讨论】:
-
你知道如何使用调试器吗?
-
可能是
seq = malloc(sizeof(int)*n);-->*seq = malloc(sizeof(int)*n);,*seq[0] = 0;-->(*seq)[0] = 0;((*seq)[1] = 1;...) -
什么是
seq[0]?以及seq[1]等。这些都是指向内存的指针。他们初始化了吗?不。你能安全地取消引用它们吗? -
不,我对 C 和命令行比较陌生
-
你应该一定学习如何使用调试器。此外,对于新手来说,GUI 调试器将变得非常容易学习 - 命令行调试器对于初学者来说通常更难使用。