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