c - 释放动态分配的矩阵

标签 c malloc

我有这段代码用于在运行时分配浮点矩阵:

float **create_matrix(int w, int h) {
    // alocates the matrix rows first
    float **matrix = (float**)malloc(h * sizeof(float*));

    // now allocates and populates each line
    for (int i = 0; i < h; i++) {
        matrix[i] = (float*) malloc(w * sizeof(float));

    // sample matrix filling
    for (int j = 0; j < w; j++)
        matrix[i][j] = (i + 1) * (j + 1);
    }

    return matrix;
}

它似乎工作正常,因为它不会崩溃,并且当我显示矩阵时,我具有与初始化它完全相同的值。尽管当我尝试释放矩阵时,如果行数小于列数,我会收到以下错误消息:

a.out(14284,0x7fff73cc9300) malloc: * error for object 0x9000000000000000: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug. Abort trap: 6"

我的释放例程如下:

void free_matrix(float **matrix, int h) {
    for (int i = 0; i < h; i++)
        free(matrix[i]);
    free(matrix);
}

最佳答案

试试这个

#include <stdio.h>
#include <stdlib.h>

float **create_matrix(int h, int w)
{
    float **matrix = (float **)malloc(h*sizeof(float *));
    int i,j;
    for(i=0;i<h;i++){
       matrix[i] = (float *)malloc(w*sizeof(float));
    }
    for(i=0;i<h;i++){
        for(j=0;j<w;j++){
            matrix[i][j] = (i+1)*(j+1);
        }
    }
    return matrix;
}

int main()
{
    int h = 2, w = 3;
    float **matrix = create_matrix(h,w);
    int i,j;
    for(i=0;i<h;i++){
        for(j=0;j<w;j++){
            printf("%.2f ",matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

开始操作之前需要分配内存。

关于c - 释放动态分配的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31603235/

相关文章:

c - 释放在另一个循环中调用的函数中分配的内存

cat 函数无限次调用 read()

c - SPI_I2S_ReceiveData 始终返回 0xff 或 0x00

memory-management - malloc 不保证返回物理上连续的内存

C - 在运行时创建一个大小大于 10M 的数组

c - struct allocate C 表

C编译器警告 "Warning: too many arguments for format"如何修复?

java - 为什么 Cassandra 是用 Java 编写的?

c++ - 如何从 C++ 定义中获取编译日期?

c - 将 PPM 的字节读入结构中的灵活成员数组