求助 关于指针

lolliboy 2010-10-23 01:53:04

#include <stdio.h>
#include <conio.h>
#include <windows.h>

class c
{
public:
c(int m, int n);

void set();

private:
int a;
int b;
};

c::c(int m, int n)
{
a = m;
b = n;
}

void c::set()
{
printf("%d %d", a, b);
}

c* pc = NULL;

DWORD WINAPI Thread(LPVOID lParam)
{
int a = 10, b = 20;
pc = new c(a, b);
pc->set();

return -1;
}

void main()
{
CreateThread(NULL, 0, Thread, 0, NULL, NULL);

pc->set();

getch();
}


我的pc指针是全局变量,但是初始化在线程Thread中,在线程外调用这个指针就会崩溃,如何修改阿

难道说线程中返回时,pc的生命期就结束了?

根据需要,这个初始化必须发生在线程中。
...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2010-10-23
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>

HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);

class c
{
public:
c(int m, int n);

void set();

private:
int a;
int b;
};

c::c(int m, int n)
{
a = m;
b = n;
}

void c::set()
{
printf("%d %d", a, b);
}

c* pc = NULL;

DWORD WINAPI Thread(LPVOID lParam)
{
int a = 10, b = 20;
pc = new c(a, b);
pc->set();
SetEvent(hEvent);
return -1;
}

void main()
{
CreateThread(NULL, 0, Thread, 0, NULL, NULL);

WaitForSingleObject(hEvent,INFINITE);
pc->set();

getch();
}

要注意同步
freecodeMAN 2010-10-23
  • 打赏
  • 举报
回复
main 和你 创建的 Thread 一样都是线程。

你不能保证Thread 在main前执行。也就是初始化不一定在 使用前。

ouyh12345 2010-10-23
  • 打赏
  • 举报
回复
同意一楼
可能main里的pc->set();会在Thread的pc = new c(a, b);之前执行
向立天 2010-10-23
  • 打赏
  • 举报
回复
你这个用法
无法保证在main函数中执行pc->set();时pc已经分配了空间

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧