C++ pThread 传入参数问题

我新建了两个线程,并往里面传入string类型的参数,但是无论我怎么写,在运行之后,传入的参数都会变成一样的,求大佬们解答一下,这是怎么回事啊
全部代码如下:

 #include <iostream>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string>
#include <sstream>
using namespace std;
#define _THREAD_NUM 2
#define LINK_MULTYPE(a,b) a##b

void* Debug(void* args)
{   
    while(true)
    {
        cout<<*((string*)args)<<endl;
        sleep(1);
    }
}

int main()
{
    bool IsStart = true;
    pthread_t thid[_THREAD_NUM];
    for(int i =0;i<_THREAD_NUM;i++)
    {
        // stringstream s;
        // s<<"Thread:"<<i;
        // string str = s.str();
        // cout<<i<<endl;

        if(IsStart){
            string str = "Thread:1";
            pthread_create(&thid[i],NULL,Debug,(void*)&(str));
            IsStart = false;
        }else
        {
            string str1 = "Thread:2";
            pthread_create(&thid[i],NULL,Debug,(void*)&(str1));
        }
    }
    cout<<"hello world!!!"<<endl;
    getchar();
    pthread_exit(NULL);
    return 0;
}

运行结果:
图片说明

1个回答

你的thread1就运行了一次 之后你设置IsStart=false 然后就一直运行thread2了 参数 没问题啊

xingjianfengaa
xingjianfengaa 回复MikuLingSSS: 变量不过期了 内存里面的东西就不是固定 出现什么乱七八糟问题 都可以理解
大约一年之前 回复
MikuLingSSS
MikuLingSSS [吐血]找到了 , &str==&str1
大约一年之前 回复
MikuLingSSS
MikuLingSSS 不过还有一个问题,我变量的生命周期已经过去了,那为什么会一直输出2啊,str和str1分配的地址应该不一样的吧
大约一年之前 回复
MikuLingSSS
MikuLingSSS 哦哦 原来是这样 谢谢大佬了
大约一年之前 回复
xingjianfengaa
xingjianfengaa 回复MikuLingSSS: 不好意思啊 是你的str1 str定义问题 局部变量,for结束后,字符串就没了,并且你传的还是地址,你可以用全局变量试试
大约一年之前 回复
xingjianfengaa
xingjianfengaa 回复MikuLingSSS: sorry 我没看清楚 对不住 我再看看
大约一年之前 回复
xingjianfengaa
xingjianfengaa 回复MikuLingSSS: 虽然不销毁 但函数只执行一次 ,你只可以看一下别人的线程 ,如果要一直进行下去函数里是需要循环的,
大约一年之前 回复
MikuLingSSS
MikuLingSSS 那Thread1是怎么被销毁的呢,Thread1一旦执行,进程不销毁,他就不会停止啊,而且,Thread2是一次输出两次,也就是说有两个线程同时接受到了Thread2这个参数,但是我那个循环只会执行两次啊,第一次创建Thread1,之后创建Thread2
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问