急一个比较诡异的malloc函数调用有关问题,当小弟我在函数中调用malloc时其他buffer中的值被改变了,求
急急急!!求助一个比较诡异的malloc函数调用问题,当我在函数中调用malloc时其他buffer中的值被改变了,求高手指点
代码如下:
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
------解决方案--------------------
你的buf_t已经越界了,与malloc有啥关系?
在第二次打印之前,把buf_t置回原值.如下示:
代码如下:
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 {