急一个比较诡异的malloc函数调用有关问题,当小弟我在函数中调用malloc时其他buffer中的值被改变了,求

急急急!!求助一个比较诡异的malloc函数调用问题,当我在函数中调用malloc时其他buffer中的值被改变了,求高手指点
本帖最后由 wlliqipeng 于 2013-02-21 09:50:28 编辑
代码如下:
     28          SamNode *node = NULL;
     29          // 获取节点信息
     30          node = DLIST_GET_FIRST(Psam->rlist);
    31          char *buf_t = (char *)node->keyid_buf;
    32          for(int num = 0;num <node->rec_num ; num ++)
    33          {
    34              printf("\nkeyid_1 = %ld",*(long *)buf_t);
    35              buf_t += sizeof(long);
    36          }
    37
                ///////此处调用malloc函数导致node中的值发生改变,若注释掉该
                   ///////语句则node中的值不会变化
    38          char * buffer = (char *)malloc(1);
    39
    40          for(int num = 0;num <node->rec_num ; num ++)
    41          {
    42                   printf("\nkeyid_2 = %ld",*(long *)buf_t);
    43                   buf_t += sizeof(long);
    44          }
                如上代码所示本来想在38行出申请内存空间,但调用malloc后导致node结构体中的值发生变化,百思不解。30行处是从链表Psam->rlist中获取一个节点。node是个结构体,其中有一个指针域keyid_buf域用于存放long型数值。
   程序运行结果
    keyid_1 = 289919226011975680
   keyid_1 = 289919226011975681
   keyid_1 = 289919226011975682
   keyid_1 = 289919226011975683
   keyid_2 = 8195
   keyid_2 = 0
   keyid_2 = 48
   keyid_2 = 0
调用malloc函数   buffer值被改变 C 语言

------解决方案--------------------
你的buf_t已经越界了,与malloc有啥关系?
在第二次打印之前,把buf_t置回原值.如下示:

    31          char *buf_t = (char *)node->keyid_buf;
    32          for(int num = 0;num <node->rec_num ; num ++)
    33          {