Почему программа C перестает выполняться после предоставления 1 элемента? - PullRequest
0 голосов
/ 01 февраля 2019

Я пишу программу, чтобы проверить, является ли набор правильным подмножеством набора или нет.Я динамически распределяю память для обоих наборов (массивов), но после предоставления одного элемента программа перестает выполняться.

   #include <stdio.h>
  int setID(int arr[],int arr2[],int size,int size2)
{
    int counter =0;
    for (int i=0; i<size2;i++)
    {
            if (arr2[i] == arr[i])
            {
                counter++;
            }


    }
    if (counter == (size2))
    {
        return 1;
    }
    else
        return 0;

}
int main ()
{
    printf("We are going to check if set A is a proper subset of B or not\n");
    printf("Please provide the cardinal number of set A \n");
    int a=0,b=0;

    scanf("%d",&a);
    int *p;
    p =(int*) malloc(a*sizeof(int));
    printf("Please provide the elements of Set A\n");
    for (int i=0;i<a;i++)
    {
        scanf("%d",p[i]);
    }
    printf("Please provide cardinal number for set B\n");
    scanf("%d",&b);
    int *p1;
    p1= (int*) malloc(b*sizeof(int));
    for (int i=0;i<b;i++)
    {
        scanf("%d",&p1[i]);
    }

    printf("Please note that 0 is false and 1 is true\n");
    printf("%d\n",setID(p,p1,a,b));
    return 0;

}

** Также я правильно передал аргументы в функции: printf ("%д \ п», SETID (р, р1, а, б));**

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Здесь есть одна ошибка

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

, которая должна быть

scanf("%d", &p[i]);

и которая верна на несколько строк ниже, когда вы сделали это с помощью p1.Вы говорите, что программа останавливается после предоставления одного элемента, и это согласуется с ошибкой.

Могут быть и другие ошибки, опубликованные другими.

0 голосов
/ 01 февраля 2019

в setID :

for (int i=0; i<size2;i++)
{
        if (arr2[i] == arr[i])
        {
            counter++;
        }
        ...

вы предполагаете, что размер arr равен> = arr2 , но этоне обязательно, потому что вы читаете их размер, а не используете их при выделении массивов и читаете их значения

, если size < size2 (a < b in main ) вы выходите из обр ( р в основной ), поведение не определено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...