Почему я получаю ошибку сегментации при попытке добавить два числа с помощью указателей? - PullRequest
0 голосов
/ 28 сентября 2019
#include <stdio.h>


int* add(int* x,int *y)
{
    int c = *x + *y;
    return &c;
}



int main()
{
    int a,b;
    int* t;

    scanf("%d%d",&a,&b);
    t=add(&a,&b);

    printf("the sum of two numbers is :%d",*t);
    return 0;
}

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

1 Ответ

3 голосов
/ 28 сентября 2019

Вы возвращаете указатель на локальную переменную функции.В результате указатель имеет недопустимое значение, а программа имеет неопределенное поведение, поскольку указанная переменная не активна после выхода из функции.Его память может быть перезаписана, например, вызовом printf.

Чтобы заставить вашу программу работать, определите переменную static.Например

int * add( const int *x, const int *y )
{
    static int c;

    c = *x + *y;

    return &c;
}
...