我有一个自定义函数,它将返回一个数组对象。
我在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;
}
答案 0 :(得分:3)
因为函数返回一个指向静态int数组的指针(换句话说,每次返回的指针是相同的内存地址)。您需要修复cusctomFunction
以每次返回一个新分配的数组。
答案 1 :(得分:1)
首先,您尝试使用纯C ++实现的目标,因此为不同的编译器设置不同的代码路径并不是一个好主意。接下来就是你应该告诉我们哪个编译器失败了。
我可以告诉你,在LLVM版本中它肯定会失败,因为你返回一个指向本地数组的第一个元素的指针,它在return语句之后变为无效。 GCC和大多数其他应该正常工作。
现在,我建议您不要使用普通数组,而是在内部创建一个向量并返回它。它将使您免于必须手动管理内存(如果您动态分配阵列)或其他问题(例如您所面临的问题)的痛苦。
答案 2 :(得分:0)
你的customFunction()
做什么/准确回归?如果返回的地址始终相同,则两个指针都会自然指向相同的内存位置。