我已经编辑了我的问题。似乎线程的运行方式与我的预期不同(windows vs linux)。以下是完整的工作示例:
#include <pthread.h>
#include <stdio.h>
#include <string.h>
void *testing(void *mptr)
{
char *mystr;
mystr=(char *)mptr;
printf(mystr);
printf("finished running thread\n");
return NULL;
}
int main()
{
pthread_t mythread;
char *str1;
str1=malloc(50);
strcpy(str1,"Hello World\n");
printf(str1);
printf("About to start\n");
//pthread_create(&mythread, NULL, testing, str1);
printf("finished creating thread\n");
printf(str1);
free(str1);
return 0;
}
以上程序产生:
Hello world
About to start
finished creating thread
Hello World
请注意,我没有在其中创建一个帖子 - 特定的行被注释掉了。 如果我不注释掉“pthread_create ..”-line输出是零星的,有时会有垃圾:
Hello world
About to start
finished creating thread
Hello World
&%¤&finished creating thread
有时候乱码部分还可以,有时它会显示为“o world”等。
从我用Google搜索的内容来看,堆栈的共享方式与Windows不同。
如何在线程中稍后访问主程序中malloc的内存?我错过了什么吗?
答案 0 :(得分:0)
也许你应该在释放字符串之前等待线程完成?
pthread_join是你的朋友。
答案 1 :(得分:0)
我弄清楚了我的问题。这可能是记忆被破坏了。 然而,那些阅读我最初的问题的人不喜欢我没有发布完整的消息来源,我得到了3个downvotes。
然后我编辑了我原来的问题以提供完整的测试源。
不幸的是,如果我已经解决了我的问题,最初投票给我的人还没有回复过来。
现在,downvotes禁止我在Stackoverflow上输入新问题。我现在总共有6个downvotes来自两个&#34;坏&#34;的问题。 所以请:那些被投票的人:请解除投票。