如何对使用 malloc 声明的 int 数组进行操作?

发布于 2024-12-03 05:30:50 字数 898 浏览 1 评论 0原文

我有这段代码:

// 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?

Here's all the code for the program

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

朱染 2024-12-10 05:30:50

更改

if(i == 1)  value = 1;

else if(i == 1)  value = 1;

编辑:
刚刚意识到这已经在评论中得到了回答。

Change

if(i == 1)  value = 1;

to

else if(i == 1)  value = 1;

EDIT:
Just realized this was already answered in the comments.

静谧幽蓝 2024-12-10 05:30:50

问题在于你的 ifs 你有两个 if 语句

if(i == 0)  value = 0;

if(i == 1)  value = 1;
  else        value = range[i - 2] + range[i - 1];

如果 i 是 0 那么第二个 if 的计算结果为 range[-2] + range[-1] 所以内存中的未定义数据

你需要使用 else 以便它只是一个if 语句(也作为风格的一个点,总是使用 {} 使事情更清晰)

if(i == 0) {  
   value = 0;
} else if(i == 1) {
   value = 1;
} else {
   value = range[i - 2] + range[i - 1];
}

在这个例子中,在循环之前设置 range[0] 和 [1] 并从 2 开始循环可能更好,所以不需要 if。

The issue is with your ifs You have two if statements

if(i == 0)  value = 0;

and

if(i == 1)  value = 1;
  else        value = range[i - 2] + range[i - 1];

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)

if(i == 0) {  
   value = 0;
} else if(i == 1) {
   value = 1;
} else {
   value = range[i - 2] + range[i - 1];
}

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.

壹場煙雨 2024-12-10 05:30:50

您在 if (i==0)if (i == 1) 之间缺少 else,因此第一次通过0 情况和 2+ 情况都会运行。

You're missing an else between the if (i==0) and if (i == 1), so the first time through both the 0 case and the 2+ case get run.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文