簡體   English   中英

無法獲得正確的指針

[英]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返回該變量在堆棧中的放置地址。
堆棧的問題在於,其上的幀會pushpop ,因此下一個堆棧幀可能會使指針指向的位置過度扭曲。

因此,您永遠不應返回指向局部變量的指針。

而是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM