【发布时间】:2012-09-26 09:35:30
【问题描述】:
我正在处理一项任务(详情见another question)。作为其中的一部分,我正在增加数组的大小。并发现当我尝试初始化一个数组时:
int arr[2097152]; // 8MB
我遇到了分段错误...我认为是因为我试图声明一个太大的数组?然后我发现解决这个问题的方法是使用malloc。但是对 C 来说是新手(主要使用 JavaScript/Python/Java ...)。我对指针和东西感到非常困惑......
我已经声明了一个 8MB 的数组:
int *arr = malloc (MBs * 1024 * 1024 / sizeof(int)); // MBs = 8
但是现在......我如何访问它,或写入它?当我像arr 一样使用它时,我得到了地址,如果我使用*arr,我得到了第一个元素?
【问题讨论】:
-
来自 JS/Python 的你应该了解堆栈和堆内存分配之间的区别。
-
malloc将字节数作为参数,所以它只是malloc(MBs * 1024 * 1024);。 -
除了提到 malloc 以及堆栈和堆之间的区别的答案之外,请记住,您也必须自己释放这个数组。如果你只在你的程序中创建了一次,你可能会逃脱,因为当你的程序终止时它会自动释放。但是,如果您在某些函数中重复执行此分配,并认为一旦超出范围就会破坏数组,那将是一场灾难