在C中检查数组的值时出现未处理的异常

时间:2013-02-04 18:52:39

标签: c arrays recursion unhandled-exception

我有一个编写递归程序的任务,该程序获取一个数组(让我们称之为arr1),数组的大小(n)和值(s)。 程序将检查数组中是否有两个数字,以便它们的摘要是s。 例 如果数组是{1,3,2,0,5}且s = 7,那么函数将打印“是”,因为5 + 2 = 7。 如果数组是{1,3,2,0,5}且s = 9,那么函数将打印“no”。没有一对的摘要等于9。

我的算法是这样的: 我计算数组中最后一个点的摘要(arr1 [n-1]),每隔一个点。如果我找到一对他们的总和是s,那么,打印是的并离开。 如果我没有找到,那么我也这样做,但不是arr1 [n-1]我检查arr1 [n-2]。我删除了最后一个点。

这是我的代码:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void input_array_dyn(int* a, int n);
void rec(int* a,int n, int s);
void main()
{
    int n=0,s=0;
    int* a;
    printf("Enter value S\n");
    scanf("%d",&s);
    printf("Enter the size of the array\n");
    scanf("%d",&n);
    a=(int*)calloc(n,sizeof(int));
    printf("Enter %d values for the array\n",n);
    input_array_dyn(a,n);
    rec(a,n,s);
    free(a);
    getch();
}
void input_array_dyn(int* a,int n)
{
    int i=0;
    for(i=0;i<n;i++)
        scanf("%d",a[i]);
}
void rec(int* a,int n, int s)
{
    int i;
    if(n==1)
    {
        printf("There are no 2 number whos summary yields S\n"); 
        return;
    }
    for(i=0;i<n-1;i++)
    {
        if(a[n-1]+a[i]==s)
        {
            printf("There are two numbers that give s\n");
            return;
        }
    }
    rec(a,n-1,s);
}

我收到一条错误消息:“Test.exe中0x5846e30e(msvcr100d.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000000。”

另外:有人对算法有更好的想法吗? :)

1 个答案:

答案 0 :(得分:2)

input_array_dyn()

scanf("%d", a[i]);

您忘记了&