You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用malloc实现矩阵转置并打印:代码问题求助

矩阵转置代码问题排查与修复

嘿,我帮你梳理下这段代码里的问题,然后给你一份能正常运行的修正版本~

你的代码存在的几个关键问题:

  • 缺少stdlib.h头文件:malloc函数属于标准库函数,必须包含这个头文件才能正确编译,否则会触发隐式声明的警告或错误
  • main函数返回值不符合C标准:标准C要求main函数返回int类型,而不是void
  • 原矩阵的行内存分配不完整:你代码里matrix1[i] = malloc(size...没写完,正确写法应该是malloc(sizeof(int) * colums1)来为每行分配对应列数的空间
  • 转置矩阵的内存完全未分配:要生成转置矩阵,需要先以原矩阵的列数作为转置矩阵的行数,原矩阵的行数作为转置矩阵的列数来分配内存
  • 缺少矩阵元素的填充逻辑:哪怕不在意具体数值,也需要给矩阵元素赋值(比如让用户输入或默认初始化),否则打印的是随机垃圾值
  • 缺少打印原矩阵和转置矩阵的逻辑代码
  • 未释放动态分配的内存:使用完动态数组后必须调用free释放内存,避免内存泄漏

修复后的完整代码:

#include <stdio.h>
#include <stdlib.h>  // 新增:malloc和free需要这个头文件

int main() {  // 修正:main返回int类型
    int rows1, colums1, i, j;
    int** matrix1, ** transpose_matrix1;

    printf("enter rows and columns\n");
    scanf("%d%d", &rows1, &colums1);

    // 分配原矩阵的内存
    matrix1 = malloc(sizeof(int*) * rows1);
    for (i = 0; i < rows1; i++) {
        matrix1[i] = malloc(sizeof(int) * colums1);
    }

    // 填充原矩阵(这里用用户输入示例,你也可以改成随机值或固定值)
    printf("enter elements of the matrix:\n");
    for (i = 0; i < rows1; i++) {
        for (j = 0; j < colums1; j++) {
            scanf("%d", &matrix1[i][j]);
        }
    }

    // 分配转置矩阵的内存:行数是原矩阵的列数,列数是原矩阵的行数
    transpose_matrix1 = malloc(sizeof(int*) * colums1);
    for (i = 0; i < colums1; i++) {
        transpose_matrix1[i] = malloc(sizeof(int) * rows1);
    }

    // 生成转置矩阵
    for (i = 0; i < rows1; i++) {
        for (j = 0; j < colums1; j++) {
            transpose_matrix1[j][i] = matrix1[i][j];
        }
    }

    // 打印原矩阵
    printf("\nOriginal Matrix:\n");
    for (i = 0; i < rows1; i++) {
        for (j = 0; j < colums1; j++) {
            printf("%d ", matrix1[i][j]);
        }
        printf("\n");
    }

    // 打印转置矩阵
    printf("\nTransposed Matrix:\n");
    for (i = 0; i < colums1; i++) {
        for (j = 0; j < rows1; j++) {
            printf("%d ", transpose_matrix1[i][j]);
        }
        printf("\n");
    }

    // 释放原矩阵内存
    for (i = 0; i < rows1; i++) {
        free(matrix1[i]);
    }
    free(matrix1);

    // 释放转置矩阵内存
    for (i = 0; i < colums1; i++) {
        free(transpose_matrix1[i]);
    }
    free(transpose_matrix1);

    return 0;  // 修正:main函数返回0表示正常结束
}

代码说明:

  • 我把printf_s和scanf_s改成了标准的printf和scanf,这样代码兼容性更好(如果你必须用带_s的安全函数,改回去就行)
  • 新增了矩阵元素输入的逻辑,你也可以根据需求改成自动赋值(比如matrix1[i][j] = i*colums1 + j;)
  • 补充了完整的内存释放步骤,避免内存泄漏

内容的提问来源于stack exchange,提问作者Or Simhon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:18:29