问答

pthread_join函数执行异常

作者:admin 2021-07-26 我要评论

写了个程序,资县成立malloc内存,然后没释放(内存泄露),pthread_join获取返回结果,在不同的编译选项下,执行结果不同,这是为啥? 要通过汇编语言看? https:...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

写了个程序,资县成立malloc内存,然后没释放(内存泄露),pthread_join获取返回结果,在不同的编译选项下,执行结果不同,这是为啥?

要通过汇编语言看?https://godbolt.org/

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>

void* thread_function(void *ignoredInThisExample)
{
    char *a = malloc(20);
    strcpy(a,"hello world");
}
int main()
{
    pthread_t thread_id;
    char *b;

    pthread_create (&thread_id, NULL,&thread_function, NULL);

    pthread_join(thread_id,(void**)&b); //here we are reciving one pointer
                                        //value so to use that we need double pointer
    printf("b is %s.\n",b);

    return 0;
}

执行结果:

[root c++]#gcc -g -O0 -o pthread pthread.c -lpthread
[root c++]#./pthread
b is hello world.
[root c++]#
[root c++]#
[root c++]#gcc -g -O1 -o pthread pthread.c -lpthread
[root c++]#
[root c++]#
[root c++]#./pthread
b is .
[root c++]#gcc -g -O2 -o pthread pthread.c -lpthread
[root c++]#./pthread
b is .
###

没有return a; 不同的优化级别 rax不一定是保留着a

    strcpy(a,"hello world");
    return a;
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 古纳于vue按下拖动元素

    古纳于vue按下拖动元素

  • Angular 项目编译并部署生产模式

    Angular 项目编译并部署生产模式

  • element-ui   表达验证时的问题

    element-ui 表达验证时的问题

  • iOS 中的静态库的作用是什么?

    iOS 中的静态库的作用是什么?

腾讯云代理商
海外云服务器