为什么这个程序在执行时崩溃了?

时间:2014-06-30 23:14:45

标签: c crash runtime-error

我正在尝试在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; 
}

Crash Screenshot

2 个答案:

答案 0 :(得分:1)

当程序的行为未定义时,任何事情都可能发生。您应该在computeArray之前为函数computeFunctionmain声明原型:

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时。

调试器对于发现简单错误非常有用。使用它们。