我尝试了以下方法来重新分配大小从 2X2 变为 3X3 的 2D float
数组。该代码在尝试为 segfault
使用 realloc
内存时抛出 weights[2]
。
num_vertices = 2;
float **weights = malloc(num_vertices*sizeof(float *)); // weight array matrix
for(i = 0; i < num_vertices; i++){
weights[i] = malloc(num_vertices*sizeof(float));
}
num_vertices = 3;
weights = realloc(weights, num_vertices*sizeof(float *)); // weight array matrix
for(i = 0; i < num_vertices; i++){
weights[i] = realloc(weights[i], num_vertices*sizeof(float));
}
当然,我可以再次对二维数组和
free
进行 malloc
,但我一直在寻找更优雅的解决方案。有任何想法吗? 最佳答案
问题是 weights[2]
在您重新分配 weights
后包含垃圾。
你可能想做这样的事情:
new_vertices = 3;
weights = realloc(weights, new_vertices*sizeof(float *));
for(i = 0; i < new_vertices; i++)
{
if (i >= num_vertices)
weights[i] = NULL;
weights[i] = realloc(weights[i], new_vertices*sizeof(float));
}
num_vertices = new_vertices;
请注意,如果 realloc 失败,则可能存在内存泄漏。由于您还没有进行错误检查,尽管目前这可能无关紧要。
关于c - 如何为二维浮点数组重新分配内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12364031/