【发布时间】:2020-08-02 03:54:16
【问题描述】:
我打算分配一个大小为1073741824(例如,相当于1GB)的大型数组,然后随机读取它,但我得到分段错误(核心转储),因为我只定义了我检查过的数组,我喜欢:
unsigned int size = 1073741824;
short arr = malloc(size * sizeof(short));
我也尝试按如下方式进行转换,但仍然是同样的问题:
unsigned int size = 1073741824;
short *arr = (short*) malloc(size * sizeof(short));
ulimit 命令也返回unlimited
那我做错了什么?
【问题讨论】:
-
你可能需要一个指针:
short *arr = malloc(...). -
正如@MOehm 所建议的,这不是malloc 的正确使用。查看:es.cppreference.com/w/c/memory/malloc,查看示例
-
你说得对,我很抱歉我编辑了我的问题,这就是我编写和测试代码的方式,但无论如何它仍然返回分段错误。
-
你测试
malloc的返回值了吗? -
请注意,
short至少有 2 个字节宽,因此您尝试分配至少 2 GB,而不仅仅是一个。分配本身到段错误会令人惊讶,但它可能会合理地失败,返回NULL。您必须始终检查分配失败。如果它确实失败了,但您尝试使用生成的空指针,就好像它指向一个对象一样,那么分段错误将是一个合理的结果。
标签: c gcc segmentation-fault malloc