使用2D矩阵而没有堆栈溢出

时间:2017-12-05 19:59:16

标签: c

你好。 我有一个关于最长公共子序列的项目

molecular hydrogen

对于小矩阵,它工作正常,但对于更大的序列,我得到堆栈溢出。 我被告知"你不应该在main()函数或任何其他函数中存储2D矩阵(它可能导致堆栈溢出)。可能将其移出函数或动态分配。"但是我不知道这个人在功能之外移动它意味着什么,我不知道分配2D矩阵。

对不起,很长的帖子。 谢谢

1 个答案:

答案 0 :(得分:1)

替换

char X[m], Y[n];

通过

char *X = malloc(m * sizeof(char));
char *Y = malloc(n * sizeof(char));

并在main添加结尾处

free(X);
free(Y);

现在您在堆上进行动态分配。你所做的不是标准的(堆栈上的可变长度数组,见here)。除此之外,我还没有检查你的代码。乍一看,在计算时首先分成nm似乎很奇怪,然后在填充时使用i两个数组。

<强>更新
现在我看到你在原帖中编辑了你的代码。以下是使用双指针的方法。

分配:

int **L = malloc((m + 1) * sizeof(int*));
for (int i = 0; i < m + 1; i++)
    L[i] = malloc((n + 1) * sizeof(int));

释放:

for (int i = 0; i < m + 1; i++)
    free(L[i]);
free(L);

然后移除realloc。并且不要忘记在释放后你不能返回L[m][n],所以存储该值,然后释放,然后返回值。