[英]Not able to get the right pointer
此方法返回一個指向int數組的第一個元素的指針
int *getNumbers(){
int *retPtr;
int ret[6];
ret[0] = 1;
ret[1] = 2;
ret[2] = 3;
ret[3] = 4;
ret[4] = 5;
ret[5] = 6;
retPtr = ret;
return retPtr;
}
在這一點上,我可以做*(arryPtr + x)
並得到很好的數組值
int* arryPtr = getNumbers();
int result = NumberProcess1(arryPtr);
一旦進入此方法,我將無法執行此操作。
int NumberProcess1(int* numbers)
我一直在獲得有價值的價值觀,但我不確定為什么。
ret[6];
在堆棧上分配並return retPtr
返回該變量在堆棧中的放置地址。
堆棧的問題在於,其上的幀會push
並pop
,因此下一個堆棧幀可能會使指針指向的位置過度扭曲。
因此,您永遠不應返回指向局部變量的指針。
而是在heap
分配:
int *ret = malloc(sizeof(int));
int ret[6];
聲明一個僅存在於getNumbers()
函數中的數組。 該函數返回后,內存將不再有效。 嘗試使用它會導致不確定的行為。
一種解決方案是將其設置為static int ret[6];
其他解決方案包括讓調用方分配緩沖區,以及使用動態分配。
另外,該函數應為int *getNumbers(void)
- void
很重要,因為它形成了原型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.