关于malloc( )的使用? 请多指教!

micha_he 2001-10-02 04:24:37
我最近读了一段程序。很困扰。希望高手指点迷津。
BYTE *_ppWBuf[4];
#define WRITE_BUF_SIZE 0x8000;
#define FLASH_RW_SIZE 0x10000L;
for(_bWBank=0,_dISize=0; _dISize<FLASH_RW_SIZE; _bWBank++,_dISize+=WRITE_BUF_SIZE)
{
_ppbWBuf[_bWBank] = (BYTE *)malloc(WRITE_BUF_SIZE);//
if (_ppbWBuf[_bWBank] == NULL)
{
ErrMsg(ERR_MEMORY_ALLOC);//只是一个错误信息函数。不用理睬
}
memset(_ppbWBuf[_bWBank], 0, WRITE_BUF_SIZE);
}
我的内存是256M,为什么分不出0x10000l的内存,在分第二次时,_ppbWBuf[1]时为空?

...全文
90 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkay 2001-10-02
  • 打赏
  • 举报
回复
yes!
sttony 2001-10-02
  • 打赏
  • 举报
回复
TC++3.0是16位的,使用超过64K的内存时,你应该设置内存模式,巨或大模式。
32位程序可以分配2G以上的空间。
BigApple 2001-10-02
  • 打赏
  • 举报
回复
你是在WIN32下?
我用VC6,编了一个控制台的程序,能分出来.我也是256M.
#include "stdafx.h"
#include <malloc.h>
#include <memory.h>

int main(int argc, char* argv[])
{
{
void *p1;
void *p2;
#define WRITE_BUF_SIZE 0x80000
#define FLASH_RW_SIZE 0x100000L
p1 = malloc( FLASH_RW_SIZE );
memset(p1, 0, FLASH_RW_SIZE);
p2 = malloc( FLASH_RW_SIZE );
memset(p2, 0, FLASH_RW_SIZE);
free(p1);
free(p2);
}
return 0;
}

micha_he 2001-10-02
  • 打赏
  • 举报
回复
to ybchen() :
谢谢你的指点,我曾试过把FLASH_RW_SIZE=0xbfff,而把WRITE_BUF_SIZE=0x4000;这样程序执行四次退出。也就是内存<0xbfff就完全退出循环。而如果改为0xd000,就会又为NULL,这是为什么?(我用的是TC++3.0),他的编译器是32位的吧?
  • 打赏
  • 举报
回复
在 32 比特的 C 编译器运行没有任何错误,可以分配所有的内存。
在 16 比特的 C 编译器不能分配大于 64k 的内存,由 16 比特内存管理机制决定的。需要用特殊办法访问扩展内存才能分配所有的内存。比如在 DOS 下用程序访问 HIMEM.SYS 分配内存。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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