Мой код работает, дает правильный вывод, но я также получаю дополнительные цифры - PullRequest
0 голосов
/ 18 февраля 2019

Я создал программу, которая будет принимать два массива и помещать их в функцию, которая будет сравнивать элементы обоих массивов, и создавать новый массив, содержащий все уникальные элементы из первых 2. Мой код компилируется безошибки, и когда я запускаю код, я получаю правильный вывод, однако я получаю кучу дополнительных случайных чисел по всему размеру после.Я не уверен, является ли это какой-то ошибкой сегментации или чем-то еще.Но я не уверен, с чем связана эта проблема и где искать решение.

#include <stdio.h>

void find_elements(int *a, int n1, int *b, int n2, int *c, int *size);

int main(){

int n1, n2;
int a[n1];
int b[n2];
int i;
int size=0;

printf("Enter the length of the first array: ");
scanf("%d", &n1);


printf("Enter the elements of the first array: ");
for(i=0; i<n1; i++)
scanf("%d", &a[i]);

printf("Enter the length of the second array: ");
scanf("%d", &n2);


printf("enter the elements of the second array: ");
for(i=0; i<n2; i++)
scanf("%d", &b[i]);

size = n1+n2;
int c[size];

  find_elements(a, n1, b, n2, c, &size);
printf("Output: ");
for(i=0; i<(size); i++)
printf("%d ", c[i]);


return 0;   

}

void find_elements(int *a, int n1, int *b, int n2, int *c, int *size){

int *p;
int *p1;
int i, j;
int count;

p=a;

for(i=0; i<n1; i++){
    p1 = b;
    for(j=0; j<n2; j++){
        if(*p==*p1){
            break;}
        p1++;
            }
    if(j==n2){
        *c=*p;
        c++;
        count++;
        }
    p++;

}

p=b;

for(i=0; i<n2; i++){
    p1 = a;
    for(j=0; j<n1; j++){
            if(*p==*p1){
            break;}
        p1++;
            }
    if(j==n1){
        *c=*p;
        c++;
        count++;
        }
    p++;
    *size = count;

}}

Пример ввода / вывода для моего кода:

Введите длину первого массива: 5

Введите элементы массива: 9 8 5 6 4

Введите длину второго массива: 4

Введите элементы массива: 6 9 7 1

Вывод: 8 5 4 7 1

Iполучить этот вывод, но в дополнение я получаю это:

Выход: 8 5 4 7 1 0 -1 0 0 0 740434312 60 0 0 4196006 0 6 7 9 1 9 8 5 6 4 0 4196528 65 4 5-1 -1 1000611008 32764 -1 -1 1000610992 32764 8 0 1000610928 32764 4195408 43 0 0 4195408 0 0 0 746712

1 Ответ

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

Одной из проблем с кодом является последовательность:

int n1, n2;
int a[n1];
int b[n2];

Вы выделяете массивы a и b с неинициализированными значениями, т. Е. n1 и n2 неизвестны взапуск вашей программы.

Другая проблема в том, что int count; в find_elements также не инициализирован.Таким образом, возвращаемое значение для выходного параметра size не определено.

Память более безопасная (небезопасная) версия main может выглядеть следующим образом:

int main() {
    printf("Enter the length of the first array: ");
    int n1;
    scanf("%d", &n1);

    int *a = (int*) malloc(sizeof(int) * n1);

    printf("Enter the elements of the first array: ");
    for (int i = 0; i < n1; i++)
        scanf("%d", &a[i]);

    printf("Enter the length of the second array: ");
    int n2;
    scanf("%d", &n2);

    int*b=(int*)malloc(sizeof(int)*n2);

    printf("enter the elements of the second array: ");
    for (int i = 0; i < n2; i++)
        scanf("%d", &b[i]);

    int size = n1 + n2;

    int *c = (int*)malloc(sizeof(int)* size);

    find_elements(a, n1, b, n2, c, &size);
    printf("Output: ");
    for (int i = 0; i < (size); i++)
        printf("%d ", c[i]);

    free(c);
    free(b);
    free(a);

    return 0;
}
...