簡體   English   中英

確定主線程的pthread_create中的參數在C中是否為NULL

[英]Determine if argument in pthread_create from main thread is NULL in C

我試圖找出傳遞給pthread_create的指針是否為NULL並已被釋放。 但是,在下面的代碼中, idx仍包含內存地址,即$1 = (int *) 0x601010

有沒有辦法確定idx是否已釋放並且為NULL?

#include <pthread.h>

void *foo(void *i) {
    int a = *((int *) i); 
    free(i);
    i = NULL;
}

int main() {
    pthread_t thread;
    int *idx = malloc(sizeof(*idx));
    pthread_create(&thread, 0, foo, (void *) idx);
    pthread_detach(thread);
    sleep(10);
    // if (idx == NULL) // contains (int *) 0x601010
    // puts("done");
    return 0;
}

請記住,與在C語言中相比,所有函數調用參數都是按值傳遞的,因此,從來沒有,永遠不會,從來沒有使用過free() d的指針將為null,但是如果將其設為值,則在自由調用之后。

當你做

void *p = malloc(100);
...
free(p);

然后檢查p的值,它將與調用free(3)之前的值相同,因為將其強制為NULL的唯一操作是顯式為其分配該值。 像這樣:

free(p); p = NULL;

請記住,使free(3)失敗的唯一方法是將其傳遞給未分配指針的引用,這通常會掛起程序(未定義的行為)。因此,如果要確保指針不可用,只需分配NULL對此。

暫無
暫無

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

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