如何通过linux中的线程与主程序共享内存

时间:2016-08-04 19:12:15

标签: c linux memory pthreads share

我已经编辑了我的问题。似乎线程的运行方式与我的预期不同(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的内存?我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

也许你应该在释放字符串之前等待线程完成?

pthread_join是你的朋友。

答案 1 :(得分:0)

我弄清楚了我的问题。这可能是记忆被破坏了。 然而,那些阅读我最初的问题的人不喜欢我没有发布完整的消息来源,我得到了3个downvotes。

然后我编辑了我原来的问题以提供完整的测试源。

不幸的是,如果我已经解决了我的问题,最初投票给我的人还没有回复过来。

现在,downvotes禁止我在Stackoverflow上输入新问题。我现在总共有6个downvotes来自两个&#34;坏&#34;的问题。 所以请:那些被投票的人:请解除投票。