在C ++中使用指针数组

时间:2014-09-26 08:25:44

标签: c malloc

我这样编码,但它有段错误。

有什么问题?

int vector_size = 100000000;

float *rows[vector_size];

for (int i=0; i<vector_size; i++) {
    rows[i] = (float *)malloc(sizeof(float)*2); // crashed here
    // ...
}

2 个答案:

答案 0 :(得分:1)

您正在尝试分配大量内存。如果你真的需要这么多漂浮物,每个漂浮物使用一个单独的malloc可能是一个糟糕的计划。 Malloc有它自己的开销,因为有一个可以分配的最小块大小,并且内存管理器还需要跟踪所有那些单独分配的内存区域,更不用说这个指针列表的大小了抱着。

更好的解决方案可能是在一个块中为所有浮点数分配足够的空间,并将索引作为数组分配,而不是尝试保留一个指针列表......

因此...

float *rows = malloc(sizeof(float) * vector_size);

可能是一个更好的起点。

答案 1 :(得分:0)

尝试分配不在堆栈中但在堆中的内存。

float **rows = new float*[vector_size];

关于崩溃的消息是什么?

它看起来不像内存溢出,因为如果内存结束,malloc()会返回NULL:\

P.S。对不起我的英文)

更新。哦,我没有看到上面的评论