繁体   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