代码之家  ›  专栏  ›  技术社区  ›  Kevin Meredith

函数返回指向int的指针

  •  4
  • Kevin Meredith  · 技术社区  · 14 年前

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

    正如我理解的int*add,它应该返回一个指向整数的指针。那么,我应该可以说:

    int*a=加(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 回复  |  直到 11 年前
        1
  •  5
  •   sharptooth    14 年前

     *c = d;
    

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

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

    这样称呼它:

    int initialValue = ...;
    add( 4, &initialValue );
    
        2
  •  8
  •   JaredPar    14 年前

    问题是你已经声明了 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);
    
        3
  •  3
  •   Tyler McHenry    14 年前

    永远不要给指针分配任何内存 c . 指针必须引用有效内存,并且必须通过调用 new 例如写

    int* c = new int();
    

    add 功能。现在 C 指向足以容纳 int . 当你完成记忆后,打电话给 delete c 解除分配并将其释放回系统。

        4
  •  1
  •   jbernadas    14 年前

    您会得到一个错误,因为C是一个未初始化的指针,所以它是未定义的行为。