我这样编码,但它有段错误。
有什么问题?
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
// ...
}
答案 0 :(得分:1)
您正在尝试分配大量内存。如果你真的需要这么多漂浮物,每个漂浮物使用一个单独的malloc可能是一个糟糕的计划。 Malloc有它自己的开销,因为有一个可以分配的最小块大小,并且内存管理器还需要跟踪所有那些单独分配的内存区域,更不用说这个指针列表的大小了抱着。
更好的解决方案可能是在一个块中为所有浮点数分配足够的空间,并将索引作为数组分配,而不是尝试保留一个指针列表......
因此...
float *rows = malloc(sizeof(float) * vector_size);
可能是一个更好的起点。
答案 1 :(得分:0)
尝试分配不在堆栈中但在堆中的内存。
float **rows = new float*[vector_size];
关于崩溃的消息是什么?
它看起来不像内存溢出,因为如果内存结束,malloc()会返回NULL:\
P.S。对不起我的英文)
更新。哦,我没有看到上面的评论