【发布时间】:2017-03-12 14:17:58
【问题描述】:
我正在尝试创建一个函数,它可以在每次需要时动态地将 1 行和 1 列添加到方阵中。我将代码作为示例发布,我从整数的“1x1 矩阵”开始,我尝试添加一行和一列 5 次以获得 fianl 5x5 矩阵,我不明白为什么操作系统会立即停止执行。在 for 循环中,首先我重新分配指针的“列”数组,添加一个新的(所以是一个新的行),然后为它的每个块(所以对于每一行)我重新分配其他 N 个内存块。似乎我试图访问一个禁止的内存地址,但我不明白为什么,怎么了? P.S:我的英语不可能完美,所以如果你不明白我想说什么,我会解释得更好。
#include <stdlib.h>
#include <malloc.h>
#include <stdbool.h>
#include <stdio.h>
int **M,N;
int main(int argc, char** argv) {
N = 1;
M = (int**)malloc(sizeof(int*));
M[0] = (int*)malloc(sizeof(int));
for (int i = 0; i < 5; i++) {
N++;
M = (int**)realloc(M, N * sizeof(int*));
for (int k=0; k<N; k++)
M[k] = (int*)realloc(M[k], N * sizeof(int));
}
}
【问题讨论】:
-
您的代码中没有矩阵(又名二维数组),也没有任何东西可以指向一个。指针不是数组!如果需要矩阵,请使用二维数组。
-
@Olaf 指针不是数组并不意味着它不能像数组一样使用。 2D 数组显然行不通,因为 OP 希望能够动态重新分配
-
@EdHeal OP使用了双指针,很明显可以像二维数组/矩阵一样使用
-
@EdHeal 这与这个问题完全不相关,因为 OP 指定了一个方阵并使用单个变量 (N) 来界定两边的长度