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

如何将数组扩展为n×n矩阵?C语言代码问题求助

修正后的C语言矩阵扩展实现代码

完整可运行代码

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

int** expand(int n, int* v) {
    // 分配外层指针数组,存储n行的地址
    int** matrix = (int**)malloc(n * sizeof(int*));
    if (matrix == NULL) {
        perror("malloc failed for matrix");
        exit(EXIT_FAILURE);
    }

    // 为每行分配内存并复制原数组内容
    for (int i = 0; i < n; i++) {
        matrix[i] = (int*)malloc(n * sizeof(int));
        if (matrix[i] == NULL) {
            perror("malloc failed for row");
            // 分配失败时回滚已分配内存,避免泄漏
            for (int j = 0; j < i; j++) {
                free(matrix[j]);
            }
            free(matrix);
            exit(EXIT_FAILURE);
        }
        // 复制原数组到当前行
        memcpy(matrix[i], v, n * sizeof(int));
    }

    return matrix;
}

int main() {
    int n;
    // 持续接收输入直到EOF
    while (scanf("%d", &n) != EOF) {
        int* v = (int*)malloc(n * sizeof(int));
        if (v == NULL) {
            perror("malloc failed for array v");
            exit(EXIT_FAILURE);
        }

        // 读取n个数组元素
        for (int i = 0; i < n; i++) {
            scanf("%d", &v[i]);
        }

        int** result = expand(n, v);

        // 按要求输出矩阵
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                printf("%d ", result[i][j]);
            }
            printf("\n");
        }

        // 释放所有动态分配的内存
        for (int i = 0; i < n; i++) {
            free(result[i]);
        }
        free(result);
        free(v);
    }

    return 0;
}

核心问题修正说明

  1. 内存分配错误修复
    原代码大概率只分配了外层指针数组,未为每一行单独分配内存空间,导致行指针指向未初始化的垃圾内存,输出时出现随机值。修正后先分配外层指针数组,再循环为每行分配n个int的内存块。

  2. 复制逻辑修正
    通过memcpy(或循环赋值)将原数组完整复制到每一行,确保每行内容与原数组一致,符合"原数组元素填充每一行"的要求。

  3. 内存泄漏防护
    添加了内存分配失败时的回滚释放逻辑,避免部分分配的内存无法回收;主函数每次循环结束后释放所有动态内存,防止长期运行内存泄漏。

测试效果

输入4和1 2 3 4,输出如下:

1 2 3 4 
1 2 3 4 
1 2 3 4 
1 2 3 4 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:57