一个变量中的最大指针数

时间:2014-10-24 09:17:28

标签: c++ pointers size max

在我的项目中,有一百万个输入,我应该采用不同数量的输入来比较排序/搜索算法。一切都很好,直到我试图接受五千个千兆输入。因此,我已经意识到我不能通过使用数组创建五十万个指向我的类甚至整数类型的指针。但是,我可以创建五个大小为十万的指针。     
    
    如果我没有很好地解释,只需看看这两个代码;

int *ptr[500000]; // it crashes

int *ptr1[100000]; // it runs well
int *ptr2[100000];
int *ptr3[100000];
int *ptr4[100000];
int *ptr5[100000];

崩溃的原因是什么?有限制还是内存?当然,我该如何解决?

1 个答案:

答案 0 :(得分:1)

您正尝试在堆栈上分配500,000个条目数组。堆栈实际上并不是为了保存这样的大量数据而设计的。在您的情况下,堆栈恰好大到足以容纳100,000个条目(甚至几个不同的100,000个条目)但在单个块中不是500,000。如果溢出堆栈,行为未定义但可能发生崩溃。

通过在堆上分配数组,您将获得更好的结果。

int **ptr = malloc(500000*sizeof(int*));

请记住检查malloc中的NULL返回值,并在完成后释放内存。