簡體   English   中英

初始化為非本地指針后從函數返回指針

[英]Returning pointer from function after being initialized to non-local pointer

我認為我正在做的事很安全,但是我想先與所有聰明的人確認一下。

我知道從函數返回指向局部變量的指針是不好的!

但是,如果指針在函數調用之外分配並作為輸入傳遞,該怎么辦。 然后在函數內部調用本地指針,將其初始化為輸入指針,用於設置一些struct->members ,然后return ed?

這是一個使用(int *)而不是我的代碼(struct type_s *)

int *modify_p_x(int *p_x)
{
    int *new_p_x = p_x;
    *new_p_x = 100;
    return new_p_x;
}

int main(int argc, char **argv)
{
    int x = 42;
    int *p_x = &x;

    p_x = modify_p_x(p_x);

    return 0;
}

由於new_p_x is使用p_x初始化的,並且p_x的生命周期與調用modify_p_x函數modify_p_x ,所以這使此代碼安全嗎?

謝謝。

本地指針沒有錯。 問題在於返回指向本地事物的指針。 回想一下為什么這樣做很糟糕:當函數返回時,該東西使用的內存可以重新用於其他東西。

modify_p_x被賦予指向x的指針(在main分配),使用它來更改x並返回該指針,然后main將其重新分配給p_x 除了如何使用它,這與使用int而不是指針沒有什么不同,而且我認為您不必擔心返回int變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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