C ++:第二次调用函数,但仍影响我以前的指针

时间:2012-02-16 17:09:12

标签: c++ arrays function pointers return

我有一个自定义函数,它将返回一个数组对象。

我在main()中调用函数,如下所示

int * FirstPointer = customFunction(123456);

但是再次使用该功能时

int * SecondPointer = customFunction(23);

它将影响我的FirstPointer,它从第二次调用返回的数组时将函数调用到FirstPointer。

为什么???

这是我的自定义功能

//Description : integerSplitter(int x) function take in integer value 
//              and return an array object that contain the integer value ONE digit by ONE digit in array object.
//              !! The returned array object is zero-base.
//Example       : int* myObjectPointerName = integerSplitter(8912341379)
//              cout<<myObjectPointerName[0]<<myObjectPointerName[3];
//Creator     : kent.jr@me.com

int* integerSplitter(int x) { 

    int myInteger = x;
    myInteger = x;

    int myIntegerCounter = 0;
    myIntegerCounter = 0;

    int myDivider = 1;
    myDivider = 1;

    while(myInteger>=1) { 
        myInteger /= 10;
        myIntegerCounter++;
    }

    //for most of the compiler
    int* myIntegerArray;
    myIntegerArray = new int[myIntegerCounter];

    /*
    //for LLVM compiler
    int myIntegerArray[myIntegerCounter];
    */
    /*
    //for GCC Compiler
    //const int constMyIntegerCounter = myIntegerCounter;
    int* myIntegerArray = new int[ constMyIntegerCounter ];
    */

    myInteger = x;
    while(myIntegerCounter >= 1) {
        myIntegerCounter--;
        myIntegerArray[myIntegerCounter] = (myInteger/myDivider)%10;
        myDivider *= 10;
    }


    //The above while statement will automatically carry out the below statement
    //....
    //....
    //myIntegerArray[0] = (myInteger/10000000)%10;
    //myIntegerArray[1] = (myInteger/1000000)%10;
    //myIntegerArray[2] = (myInteger/100000)%10;
    //myIntegerArray[3] = (myInteger/10000)%10;
    //myIntegerArray[4] = (myInteger/1000)%10;
    //myIntegerArray[5] = (myInteger/100)%10;
    //myIntegerArray[6] = (myInteger/10)%10;
    //myIntegerArray[7] = (myInteger/1)%10;

    return myIntegerArray;
}

3 个答案:

答案 0 :(得分:3)

因为函数返回一个指向静态int数组的指针(换句话说,每次返回的指针是相同的内存地址)。您需要修复cusctomFunction以每次返回一个新分配的数组。

答案 1 :(得分:1)

首先,您尝试使用纯C ++实现的目标,因此为不同的编译器设置不同的代码路径并不是一个好主意。接下来就是你应该告诉我们哪个编译器失败了。

我可以告诉你,在LLVM版本中它肯定会失败,因为你返回一个指向本地数组的第一个元素的指针,它在return语句之后变为无效。 GCC和大多数其他应该正常工作。

现在,我建议您不要使用普通数组,而是在内部创建一个向量并返回它。它将使您免于必须手动管理内存(如果您动态分配阵列)或其他问题(例如您所面临的问题)的痛苦。

答案 2 :(得分:0)

你的customFunction()做什么/准确回归?如果返回的地址始终相同,则两个指针都会自然指向相同的内存位置。