如何对使用 malloc 声明的 int 数组进行操作?
我有这段代码:
// 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 的大小作为每个值之间的跃点,但出现了分段错误。我是否正确使用了 []
?谁能想到我的输出奇怪的任何其他原因吗?
I have this piece of code:
// 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;
}
Running it with limit 15 outputs
65, 1, 66, 67, 133, 200, 333, 533, 866, 1399, 2265, 3664, 5929, 9593, 15522
which is not right at all. I suspect it's because I'm writing stuff like range[i - 2]
when that's not what I should be doing. I tried using the size of int as the hop between each value and got segmentation errors. Am I using []
correctly? Can anyone think of any other reason why my output is weird?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更改
为
编辑:
刚刚意识到这已经在评论中得到了回答。
Change
to
EDIT:
Just realized this was already answered in the comments.
问题在于你的 ifs 你有两个 if 语句
,
如果 i 是 0 那么第二个 if 的计算结果为 range[-2] + range[-1] 所以内存中的未定义数据
你需要使用 else 以便它只是一个if 语句(也作为风格的一个点,总是使用 {} 使事情更清晰)
在这个例子中,在循环之前设置 range[0] 和 [1] 并从 2 开始循环可能更好,所以不需要 if。
The issue is with your ifs You have two if statements
and
If i is 0 then the second if evaluates to range[-2] + range[-1] so undefined data from memory
You need to be using else so that it is just one if statement (also as a point of style always use {} to make things clearer)
In this example probably even better to set range[0] and [1] before the loop and start the loop at 2 so no need for the if.
您在
if (i==0)
和if (i == 1)
之间缺少else
,因此第一次通过0 情况和 2+ 情况都会运行。You're missing an
else
between theif (i==0)
andif (i == 1)
, so the first time through both the 0 case and the 2+ case get run.