C 当输出正确时,如何找出代码的错误?
我是编程新手,我正在尝试在UVA online judge上解决929数字迷宫,我写了这段代码,它在代码块中运行良好,但当我在UVA online judge上提交这段代码时,它显示了运行时错误,我无法找出我做错了什么C 当输出正确时,如何找出代码的错误?,c,runtime-error,C,Runtime Error,我是编程新手,我正在尝试在UVA online judge上解决929数字迷宫,我写了这段代码,它在代码块中运行良好,但当我在UVA online judge上提交这段代码时,它显示了运行时错误,我无法找出我做错了什么 #include <stdio.h> #include <stdlib.h> int min(int x, int y); int minCost(int **cost, int m, int n) { int i, j; int tc
#include <stdio.h>
#include <stdlib.h>
int min(int x, int y);
int minCost(int **cost, int m, int n) {
int i, j;
int tc[m][n];
tc[0][0] = cost[0][0];
for (i = 1; i < m; i++) {
tc[i][0] = tc[i - 1][0] + cost[i][0];
}
for (j = 1; j < n; j++) {
tc[0][j] = tc[0][j - 1] + cost[0][j];
}
for (i = 1; i < m; i++) {
for (j = 1; j < n; j++) {
tc[i][j] = min(tc[i - 1][j], tc[i][j - 1]) + cost[i][j];
}
}
return tc[m - 1][n - 1];
}
int min(int x, int y) {
if (x < y)
return x;
else
return y;
}
int main() {
int t, a, b, M, N, k;
scanf("%d", &t);
while (t--) {
scanf("%d", &M);
scanf("%d", &N);
int **c = (int **)malloc(sizeof(int*) * M);
for (k = 0; k < N; k++)
*(c + k) = (int *)malloc(sizeof(int) * M);
for (a = 0; a < M; a++) {
for (b = 0; b < N; b++) {
scanf("%d", &c[a][b]);
}
}
int res = minCost(c, M, N);
printf("%d", res);
}
return 0;
}
输出:
这应该是N
这应该是一个问题
*(c+k) = (int*)malloc(sizeof(int)*M);
应该是
*(c+k) = malloc(sizeof(int)*N); //N instead of M
一个问题是
*(c+k) = (int*)malloc(sizeof(int)*M);
应该是
*(c+k) = malloc(sizeof(int)*N); //N instead of M
欢迎来到精彩的编程世界 仔细检查代码会发现此错误: 在循环测试和
malloc
参数中,初始化循环都不正确,应为:
for (k = 0; k < M; k++) {
c[k] = malloc(sizeof(int) * N);
}
(k=0;k{
c[k]=malloc(sizeof(int)*N);
}
如前所述,您的程序调用未定义的行为。它可能偶然产生预期的结果(在您的系统上观察到),但当您访问超出分配大小的阵列时(在uva online judge网站上观察到),它也可能产生运行时错误。欢迎来到精彩的编程世界 仔细检查代码会发现此错误: 在循环测试和
malloc
参数中,初始化循环都不正确,应为:
for (k = 0; k < M; k++) {
c[k] = malloc(sizeof(int) * N);
}
(k=0;k{
c[k]=malloc(sizeof(int)*N);
}
如前所述,您的程序调用未定义的行为。它可能偶然产生预期的结果(在您的系统上观察到),但当您访问超出分配大小的阵列时(在uva online judge网站上观察到),它也可能产生运行时错误。向我们显示问题参数我会担心所有调用
malloc()
而不调用free()
在视野中。您的输出也不会被换行符分隔。当你修复了内存问题时,这将导致问题。@4386427:在线评委给出格式正确的输入;你可以略过错误处理,并摆脱它。告诉我们问题参数我会担心所有调用malloc()
,而不调用free()
。你的输出也不会被换行符分隔。当你修复了内存问题时,这将导致问题。@4386427:在线评委给出格式正确的输入;您可以略过错误处理,并摆脱它。感谢没有更多的运行时错误,但这次它说的是错误的答案。这段代码在代码块和ideone中仍然运行良好。它通过了给定的测试用例。@Mank99999:代码的输出都在一行中,答案之间没有空格,但应该在多行中,每行一个答案。@Mank99999:此初始化循环中还有一个错误。请看我的答案。谢谢没有更多的运行时错误,但这次它说的是错误的答案。这段代码在代码块和ideone中仍然运行良好。它通过了给定的测试用例。@Mank99999:代码的输出都在一行中,答案之间没有空格,但应该在多行中,每行一个答案。@Mank99999:此初始化循环中还有一个错误。看看我的答案。