我尝试了以下方法来重新分配大小从 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/

10-11 23:06