【发布时间】:2011-09-06 00:35:34
【问题描述】:
我有这段代码:
// Returns the fibonacci range until the specified limit
int fibo(int** output, int limit)
{
// Must be 1 or more
if(limit < 1) return 0;
int* range = (int*)malloc(sizeof(int) * limit);
assert(range);
int i;
// Calculate the range
for(i = 0; i < limit; i++)
{
int value;
if(i == 0) value = 0;
if(i == 1) value = 1;
else value = range[i - 2] + range[i - 1];
range[i] = value;
}
*output = range;
return 1;
}
以限制 15 个输出运行它
65、1、66、67、133、200、333、533、866、1399、2265、3664、5929、9593、15522
这根本不对。我怀疑这是因为我在写range[i - 2] 之类的东西,而那不是我应该做的。我尝试使用 int 的大小作为每个值之间的跳跃并得到分段错误。我是否正确使用[]?谁能想到我的输出很奇怪的任何其他原因?
【问题讨论】:
-
range[i-2]可以,只要i > 2。您是否尝试过在调试器中单步执行您的代码? -
这只是一个简单的错误。仔细考虑您的代码对
i == 0的作用...(提示:您希望第二个臂使用“else if”) -
切线注释:
malloc的规范习语是int *range = malloc(sizeof(*range) * limit)。不要强制转换,也不要引用sizeof中的硬编码类型。 -
不投射?为什么不呢?
-
@bmargulies:见:stackoverflow.com/questions/605845/…。