如何将数组扩展为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; }
核心问题修正说明
内存分配错误修复
原代码大概率只分配了外层指针数组,未为每一行单独分配内存空间,导致行指针指向未初始化的垃圾内存,输出时出现随机值。修正后先分配外层指针数组,再循环为每行分配n个int的内存块。复制逻辑修正
通过memcpy(或循环赋值)将原数组完整复制到每一行,确保每行内容与原数组一致,符合"原数组元素填充每一行"的要求。内存泄漏防护
添加了内存分配失败时的回滚释放逻辑,避免部分分配的内存无法回收;主函数每次循环结束后释放所有动态内存,防止长期运行内存泄漏。
测试效果
输入4和1 2 3 4,输出如下:
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
内容的提问来源于stack exchange,提问作者ghadds
相关产品推荐
相关产品推荐

