2013-04-19 3 views
1

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

int* adderFunction(int a, int b) 
{ 
    int result; 
    int *pResult; 
    pResult = &result; 
    result = a + b; 
    return (pResult); 
} 
+2

Вы возвращаете адрес локальной переменной: просто возвращает '' int' и обратный результат; ' – hmjd

+0

Не возвращайте адрес переменная local – BLUEPIXY

+0

@ user1437027 C++ проще, чем вы думаете 'int adderFunction (int a, int b) {return a + b; } '. Нет необходимости в чем-то более сложном. – john

ответ

9

Нет. Вы пытаетесь вернуть указатель на локальную переменную, которая разрушается после возврата из функции.

1

Вы возвращаете указатель на локальную переменную result. Когда вы возвращаетесь из функции, она больше не существует, но вы возвращаете указатель на нее.

0

Вы возвращаете указатель, который выходит за рамки после окончания функции. Это undefined поведение.

0

pResults указывает на стек. Вы должны использовать new, если хотите, чтобы данные были выделены в куче. Но вы больше всего помните, чтобы освободить его позже. Я бы предпочел

int adderFunction(int a, int b) 
{ 
    return a+b; 
} 

Вы также можете сделать так, если вы хотите сохранить запись указатель

void adderFunction(int a, int b,int* pResult) 
{ 
    *pResult=a+b; 
} 
+0

Хорошо, что это единственный ответ с кодом, плохо, что вы включили вторую версию функции. Нет смысла писать эту функцию с помощью указателей (или новых). – john

+0

Нет, вы, вероятно, правы. Однако этот человек, похоже, изучает C++, и если наступит день, когда что-то подобное должно быть сделано, вот как это должно быть сделано. – Xale

1

Вы создаете указатель на стек , и пытается вернуть этот указатель, который удаляется после завершения выполнения кода. Если вы хотите что-то создать на куче , вам нужно использовать ключевое слово new.

Однако ваша проблема может быть решена намного проще:

int adderFunction(int a, int b) { 
    return a + b; 
}