Chinaunix
标题:
多线程内存错误,百撕不得骑姐
[打印本页]
作者:
yueshengxiao
时间:
2013-02-22 11:11
标题:
多线程内存错误,百撕不得骑姐
本帖最后由 yueshengxiao 于 2013-02-22 11:12 编辑
linux下源码就不贴了,简化下大概是这样子:
线程内容:
unsigned char *tmp=NULL;
unsigned int data=1;
tmp=(unsigned char *)malloc(1000);
if(!tmp)
return ERROR;
memcpy(tmp,&data,sizeof(unsigned int));//赋值
if(tmp){
free(tmp);
tmp=NULL;
}
错误地方:第一个线程先做,第二个线程后做,每次第二个线程做到赋值的地方都会出内存错误。
线程间没有共享的全局变量;tmp的值两个线程不一样;赋值没有越界;malloc没有return ERROR;赋值的地方尝试直接赋值,memcpy,memset都失败;循环做这个操作,第一个线程运行正常(有时候第一个线程足够快,都能执行很多次之后第二个线程才第一次赋值,这时候报内存错误终止第一个线程);
作者:
hededisanan00
时间:
2013-02-22 13:55
tmp没有初始化吧
作者:
linux_c_py_php
时间:
2013-02-22 14:13
gdb core或者valgrind看, 这里看不出问题.
作者:
yueshengxiao
时间:
2013-02-22 16:50
回复
3#
linux_c_py_php
多线程测试,用GDB能搞定?一直对GDB蛋疼无比,平时都测试都宁愿打印
作者:
linux_c_py_php
时间:
2013-02-22 17:00
不会用gdb不要说不好用, 谢谢了...
作者:
yueshengxiao
时间:
2013-02-22 17:05
哈哈,这个确实不会用,看过同事用了一次,他这趟半天也没调出结果来。然后打退堂鼓了
回复
5#
linux_c_py_php
作者:
shdnzwy
时间:
2013-02-24 20:46
百撕不得骑姐 [复制链接]
这拼音输入法太智能了吧
作者:
daydaycome
时间:
2013-02-26 17:47
用了malloc/free的问题,
传说中的不可重入性
malloc/free线程安全但不可重入,详情请google
作者:
nketc
时间:
2013-02-26 18:05
daydaycome 发表于 2013-02-26 17:47
用了malloc/free的问题,
传说中的不可重入性
malloc/free线程安全但不可重入,详情请google
楼主的代码,哪里重入了?
作者:
yueshengxiao
时间:
2013-02-27 16:24
搜了下,似乎还真有点像这个问题,不过有点奇怪,我以前曾经用过类似的malloc和free,多线程也没有问题
回复
8#
daydaycome
作者:
zimang
时间:
2013-02-27 16:39
难道你不知道,CU有一个其姐。
作者:
autohawk
时间:
2013-02-27 23:26
回复
1#
yueshengxiao
我只能说你简化的有问题了。就这段代码,两个线程完全无影响啊,都是独立的。
作者:
yueshengxiao
时间:
2013-03-04 15:45
这个,还是新人...真不知道
回复
11#
zimang
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2