gpt4 book ai didi

c - 访问 malloc 声明的数组

转载 作者:太空狗 更新时间:2023-10-29 17:15:13 25 4
gpt4 key购买 nike

我正在做一项作业(详见 another question)。作为其中的一部分,我正在增加数组的大小。并发现当我尝试初始化一个数组时:

int arr[2097152]; // 8MB

我遇到了段错误...我认为这是因为我试图声明一个太大的数组?然后我发现解决这个问题的方法是使用 malloc。但对 C 不熟悉(主要使用 JavaScript/Python/Java ...)。我对指针和东西感到非常困惑......

我声明了一个 8MB 的数组:

int *arr = malloc (MBs * 1024 * 1024 / sizeof(int)); // MBs = 8

但是现在……我如何访问它或写入它?当我像 arr 这样使用它时,我是否得到了地址,如果我使用 *arr 我得到了第一个元素?

最佳答案

arr[index]一样使用它,就好像它被声明为数组一样。在 C 中,符号 x[y] 完全等同于 *(x + y)。这适用于数组,因为数组名称被转换为指向其第一个元素的指针。

int *arr = malloc (MBs * 1024 * 1024 / sizeof(int));

这不是一个好的方法(并且不会使它达到您想要的大小),因为您手头没有那么多元素。您应该根据元素的数量来声明它,例如,

#define ARR_LENGTH 2097152
int *arr = malloc (ARR_LENGTH * sizeof *arr);

您需要乘以元素大小,因为 malloc 的参数是字节数。

关于c - 访问 malloc 声明的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com