简单问题:在win32程序中使用realloc的问题

xqchang 2003-05-23 09:49:39
首先请问在VC的win32程序中使用malloc与realloc进行内存分配行不行?我这样做了,在debug方式程序运行很正常,但到了release模式下,发现两个问题:
1、发现malloc和realloc每次分配的内存字节数不是程序指定分配的字节数,而是16的倍数。
2、每次realloc后,前面在分配内存中的数据全没有了,查了MSDN,说已经被free了,请问我要是在内存重新调整大小之后还要保留原来的数据,有什么好的办法?
...全文
57 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawnwinds 2003-06-03
  • 打赏
  • 举报
回复
内存分配的时候,并不是正好是你所要求的那个大小,至于内存块的大小,这跟操作系统的内存管理有关,如果你用sizeof()的话,就可以保证是你所分配的大小。
xqchang 2003-05-23
  • 打赏
  • 举报
回复
没人碰到过这问题吗?
xqchang 2003-05-23
  • 打赏
  • 举报
回复
更邪了,换了另一台机器,结果如下了:

char *ppp=(char *)malloc(1);
char cc[20];
sprintf(cc,"%d",_msize(ppp));
::MessageBox(0,cc,0,MB_OK); //显示是8

char *ppp=(char *)malloc(17);
char cc[20];
sprintf(cc,"%d",_msize(ppp));
::MessageBox(0,cc,0,MB_OK); //显示是24

请大家试试上面的代码,看看结果是否一样,我办公室里的几台机器都得不到正确的结果。
拜托了!
blackblue 2003-05-23
  • 打赏
  • 举报
回复
在我得机器上没问题,无论debug还是release都显示1。

xqchang 2003-05-23
  • 打赏
  • 举报
回复
是我搞错了,现在问题是这样的:无论是malloc还是realloc,在debug版本中一切正常,但在release版本中,返回的内存块的大小都16的倍数,我用的是VC 6.0企业版(英文的)加Visual Studio 6.0的SP5,程序如下:

char *ppp=(char *)malloc(1);
char cc[20];
sprintf(cc,"%d",_msize(ppp));
::MessageBox(0,cc,0,MB_OK); //显示是16

char *ppp=(char *)malloc(17);
char cc[20];
sprintf(cc,"%d",_msize(ppp));
::MessageBox(0,cc,0,MB_OK); //显示是32

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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