我正在尝试在Dev C ++上运行此代码,但在用户输入两个数字后它仍然会崩溃。程序从用户两个数字中获取输入m和n,然后返回输出作为函数A的解,即:
A(m,n)= A(m,n-1)+ A(m-1,n),如果m,n> 0
如果m或n <0,则a(m,n)= m-n
有人可以告诉我为什么会这样吗?
#include<stdio.h>
#include<stdlib.h>
int main() {
int num1=0;
int num2=0;
int rows=0;
int columns=0;
int i,j,**array;
printf("Enter two non-negative integer numbers \n");
scanf("%d %d",&num1,&num2);
//create 2d-Array
rows=num1+1;
columns=num2+1;
array=malloc(rows * sizeof(int *));
for(i=0;i<rows;i++)
{
array[i]=malloc(columns*sizeof(int));
}
//Fill data in array
computeArray(array,rows,columns);
// Display contents of array
for (i = 0; i < rows; i++ )
{
for(j= 0; j < columns; j++ )
{
printf("array[%d][%d] = %d\n", i,j, array[i][j] );
}
}
getch();
return 0;
}
int computeArray (int **array, int rows, int columns) {
int i,j;
for(i=0; i<rows;i++)
{
for(j=0;j<columns;j++)
{
array[i][j]=computeFunction(array,i,j);
}
}
return **array;
}
int computeFunction(int **array, int i, int j) {
int value=0;
if((i<0)||(j <0))
{
value = i-j;
printf("%d",value);
return value;
}
else
{
value = (array[i][j-1] + array[i-1][j]);
printf("%d",value);
return value;
}
return value;
}
答案 0 :(得分:1)
当程序的行为未定义时,任何事情都可能发生。您应该在computeArray
之前为函数computeFunction
和main
声明原型:
int computeArray (int **array, int rows, int columns);
int computeFunction(int **array, int i, int j);
并更改
if((i<0)||(j <0)) {...}
在computeFunction
到
if((i<=0) || (j <= 0)){...}
答案 1 :(得分:1)
&安培;&安培;而不是||可能有帮助。
代码失败了value = (array[i][j-1] + array[i-1][j]);
行,当j == 0时。
调试器对于发现简单错误非常有用。使用它们。