一个算法,程序运行大概占用50M左右的内存,按理说占用不大,系统还有250M
内存可用。运行10分钟后,
这条语句出现错误
ary = realloc (ary, newlen*elsz);
if (ary == NULL && newlen != 0){
cout << "NEWLEN = " << newlen*elsz << endl;
perror("REALLOC");
exit(-1); }
return newlen;
出现null,也就是无法分配内存,此时newlen*elsz=268000
应该还有内存可以分配的
后来改成,采用malloc再次分配,还是返回null
ary = (Items *)::realloc (ary, newlen*elsz);
if (ary == NULL && newlen != 0){
cout << "NEWLEN = " << newlen*elsz << endl;
void * temp = malloc(newlen*elsz);
if(temp==NULL)
{
perror("REALLOC");
exit(-1);
}
memcpy(temp,ary,newlen*elsz);
free(ary);
ary=(Items *)temp; }
return newlen;谁能说一下怎么回事。
内存可用。运行10分钟后,
这条语句出现错误
ary = realloc (ary, newlen*elsz);
if (ary == NULL && newlen != 0){
cout << "NEWLEN = " << newlen*elsz << endl;
perror("REALLOC");
exit(-1); }
return newlen;
出现null,也就是无法分配内存,此时newlen*elsz=268000
应该还有内存可以分配的
后来改成,采用malloc再次分配,还是返回null
ary = (Items *)::realloc (ary, newlen*elsz);
if (ary == NULL && newlen != 0){
cout << "NEWLEN = " << newlen*elsz << endl;
void * temp = malloc(newlen*elsz);
if(temp==NULL)
{
perror("REALLOC");
exit(-1);
}
memcpy(temp,ary,newlen*elsz);
free(ary);
ary=(Items *)temp; }
return newlen;谁能说一下怎么回事。
解决方案 »
- 如何给一个应用程序发送组合键?
- 判断CEDIT控件是否变灰,用什么函数?
- 真诚求帮我看看下面导出函数方式对吗?又一个通宵
- 为什么总是提示"INITCOMMONCONTROLSEX"是没有定义标识!!!
- 关于一个判断语句的问题
- 如何取消vc的偵錯功能?
- 请问在VC++中如何从键盘敲入不可见字符(如0xea..)并将其存起来
- 高手、、、、为什么我用mysql和MFC。。。。。。。
- 求助:wireshark怎么统计SCTP层的chunk数
- 完成端口的一个问题。
- 怎样把非模式对话框设置为模式的,模式的设置成非模式的(同一个对话框)。在对话框显示的时候按下对话框上的按钮进行设置。
- 求一个原始数据包修改后重新计算效验和的代码
如果申请不成功,则分别申请1000份可以成功。是否可以说明是内存碎片。
如果不自己开堆,又没有办法用heapcompact来让系统的堆整理一下
我以前的开发经验是,平凡的内存操作,特别是要开辟很大的内存空间,我会采取 内存映射 或者是自己开堆,heapcompact这个函数我没用过,帮不上忙.