一道面试题

Flaght 2011-06-24 10:54:07
今天做了一道C++ WINDOWS 开发的面试题 有这样一道题 我现在也不能理解错

ClassA a; createthread(entry_point, &a);

说这段代码有问题(我抛开了其他参数的使用)。
请问 是哪里有问题?
我刚才写了下 发现是正常的啊
...全文
249 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjb_yd 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 matrixcl 的回复:]
看来我理解错了。

如果是明确的代码(而不是伪码)这样写

C/C++ code
ClassA a;
createthread(entry_point, &a);


那就是变量生命周期的原因。

解决方法

C/C++ code
ClassA *pa = new ClassA();
createthread(entry_point, pa);

记得……
[/Quote]

恩,正解,createthread(entry_point, &a)之后,如果函数很快就返回了。那么栈上的内容就会被下一个函数所覆盖,&a的内容就变了。
线程函数最好还是传递堆上的变量比较好,然后在线程返回的时候释放掉。

如果你传递的是栈上的变量,最好还是在创建子线程之后,等待子线程返回,然后再继续执行。
chengzhe 2011-06-27
  • 打赏
  • 举报
回复
考点应该在这个变量的生命周期上
kiss_rule 2011-06-26
  • 打赏
  • 举报
回复
应该是访问的问题 控制一下访问权限吧
matrixcl 2011-06-25
  • 打赏
  • 举报
回复
原题中,a不止这一个地方使用吧?例如,主线程(调用createthread的线程)很可能要使用a的。

一个变量在多个线程使用,需要加锁(一般用临界区)。否则很容易出现调试正常,但某一次运行就出莫名其妙的错误。
xinghebuluo 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangsifu2009 的回复:]

引用 8 楼 crystal28 的回复:
我也觉得,a是局部变量?

引用 2 楼 dizuo 的回复:

是不是和对象a的生命周期有关?


有可能
[/Quote]
支持这个观点
wangsifu2009 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crystal28 的回复:]
我也觉得,a是局部变量?

引用 2 楼 dizuo 的回复:

是不是和对象a的生命周期有关?
[/Quote]

有可能
「已注销」 2011-06-25
  • 打赏
  • 举报
回复
我也觉得,a是局部变量?
[Quote=引用 2 楼 dizuo 的回复:]

是不是和对象a的生命周期有关?
[/Quote]
long2015 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sanshao1314 的回复:]

没有整明白
[/Quote]
一样
nightkids_008 2011-06-25
  • 打赏
  • 举报
回复
确实有点少啊,这个很难说哪里有问题
Freedom 2011-06-25
  • 打赏
  • 举报
回复
没有整明白
小小summer 2011-06-25
  • 打赏
  • 举报
回复
13楼的解答我比较赞成,你用的是引用来调用a这个地方真的很不好说,你的调用是否正确
而且内存在这里的分配也很有问题
matrixcl 2011-06-25
  • 打赏
  • 举报
回复
看来我理解错了。

如果是明确的代码(而不是伪码)这样写
ClassA a; 
createthread(entry_point, &a);


那就是变量生命周期的原因。

解决方法
ClassA *pa = new ClassA(); 
createthread(entry_point, pa);

记得合适的实际释放。
chaos-god 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xinghebuluo 的回复:]

引用 9 楼 wangsifu2009 的回复:

引用 8 楼 crystal28 的回复:
我也觉得,a是局部变量?

引用 2 楼 dizuo 的回复:

是不是和对象a的生命周期有关?


有可能

支持这个观点
[/Quote]

这个回答是对的。
yuqangy 2011-06-24
  • 打赏
  • 举报
回复
cteatethread 第一个参数是安全属性,第二个参数是堆大小,
可是面试题。。。
不懂
5t4rk 2011-06-24
  • 打赏
  • 举报
回复
对啊
楼主你是不是把什么其他信息忘了
确实已知条件太少了了
icelemon1314 2011-06-24
  • 打赏
  • 举报
回复
给出的信息太少了!
春文秋武 2011-06-24
  • 打赏
  • 举报
回复
问题不清楚,a类,createthread函数。。。
ryfdizuo 2011-06-24
  • 打赏
  • 举报
回复
是不是和对象a的生命周期有关?
机智的呆呆 2011-06-24
  • 打赏
  • 举报
回复

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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