function返回指向int的指针

时间:2010-08-18 14:34:32

标签: c++ pointers

调用add(4)时,我的main()在下面崩溃。

据我所知int * add,它应该返回一个指向整数的指针。然后,我应该能够主要说:

int * a = add(3);

返回指向int的指针。

请解释我做错了什么。

#include <cstdlib>
#include <iostream>

using namespace std;

int* add (int a) {
   int * c, d;
   d = a + 1;
   *c = d;
   cout << "c = " << c << endl; 
   return c;
}

int main(int argc, char *argv[])
{
    int a = 4;

    int * c;

    c = add(4); 

    system("PAUSE");
    return EXIT_SUCCESS;
}

4 个答案:

答案 0 :(得分:8)

问题是您已声明int*但未给出任何指向的内容。你需要做的是用一个内存位置初始化它(省略错误检查)

int* c = new int();
...
*c = d;  // Now works

稍后虽然你需要确保释放这个内存,因为它是一个已分配的资源。

更好的解决方案是使用引用。指针具有几个讨厌的属性,包括单位化值,NULL,需要释放等等......其中大多数都不存在于引用中。以下是在此方案中如何使用引用的示例。

void add (int a, int& c) {
   int d;
   d = a + 1;
   c = d;
   cout << "c = " << c << endl; 
}

int c;
add(4, c);

答案 1 :(得分:5)

 *c = d;

指针c未初始化,因此您的程序会运行到未定义的行为。您可以执行以下操作:

void add( int what, int* toWhat )
{
    (*toWhat) += what;
}

并将其称为:

int initialValue = ...;
add( 4, &initialValue );

答案 2 :(得分:3)

您永远不会将任何内存分配给指针c。指针必须引用有效的内存,并且您必须通过调用new来自行分配该内存,例如写

int* c = new int();

add函数中。现在c指向一个有效的内存块,其大小足以容纳int。完成该内存后,请调用delete c取消分配并将其释放回系统。

答案 3 :(得分:1)

您收到错误,因为c是未初始化的指针,因此它是未定义的行为。