如何重新分配2D浮点数组的内存?

str*_*eek 3 c malloc realloc

我尝试以下方法重新分配一个float大小从2X2到3X3 的2D 数组.代码抛出一段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));
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以再次free使用2D阵列malloc,但我正在寻找更优雅的解决方案.有任何想法吗?

Pau*_*l R 5

问题是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;
Run Code Online (Sandbox Code Playgroud)

请注意,如果realloc失败,您可能会发生内存泄漏.既然你没有错误检查,虽然这可能现在无关紧要.