鱼C论坛

 找回密码
 立即注册
查看: 3514|回复: 18

为什么会有内存申请失败??跪求解答

[复制链接]
发表于 2012-9-26 20:54:05 | 显示全部楼层 |阅读模式
1鱼币
假如:有大量的数据 需要读进内存存储,但是在动态申请内存的过程中,发现申请失败了,但是此时内存还是很充足的,而且 连续内存空间也很充足,那为什么还是会申请失败呢???求大神们 给出原因啊注:请不要说 比如 代码写错了啊 内存不足啊 之类的答案  谢谢!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-26 21:11:23 | 显示全部楼层
会不会是某个指针的引用不恰当~~~~~
前两天我还遇到过一个,提在这里问过的~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-26 21:38:39 | 显示全部楼层
你用malloc还是new?
如果malloc失败的话我也不能解释
如果new失败的话很可能是new的时候调用的构造函数发生了异常导致程序中止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-26 21:52:30 | 显示全部楼层

比如说用C++ STL模版中的vector存放读入的大量数据,但是最后申请失败 条件还是上面的给的 内存充足,而且连续内存空间充足  这是为什么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-26 21:56:21 | 显示全部楼层
晓北 发表于 2012-9-26 21:11
会不会是某个指针的引用不恰当~~~~~
前两天我还遇到过一个,提在这里问过的~~~

我的意思 就是一直都正常 突然在申请了很多次之后 申请不成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-26 22:14:47 | 显示全部楼层
拉登o睡觉 发表于 2012-9-26 21:52
比如说用C++ STL模版中的vector存放读入的大量数据,但是最后申请失败 条件还是上面的给的 内存充足,而且 ...

你vector里存放的是什么?基本数据类型还是类类型?如果是类类型应该检查下该类型的构造函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-26 22:24:00 | 显示全部楼层
仰望天上的光 发表于 2012-9-26 22:14
你vector里存放的是什么?基本数据类型还是类类型?如果是类类型应该检查下该类型的构造函数

基本数据类型,这是我面试**搜索公司 问的问题,我的第一回答 是没有连续的内存空间了,他告诉我有连续的内存空间,而且还很充足,想想其它的原因,然后我就说不出来了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-27 09:40:41 | 显示全部楼层
仰望天上的光 发表于 2012-9-26 21:38
你用malloc还是new?
如果malloc失败的话我也不能解释
如果new失败的话很可能是new的时候调用的构造函数发 ...

构造函数 怎么发生异常 导致这种情况啊 就是一直能申请成功 然后在某个时刻 申请失败了??另外 我突然想 会不会是 内存也像U盘一样啊  有写保护 剩下的充足的内存被写保护了 所以会申请失败 ,如果在没有占有这块内存之前 能够写保护 那应该怎么设置,才能使这块内存是写保护的呢??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-27 11:36:49 | 显示全部楼层
拉登o睡觉 发表于 2012-9-27 09:40
构造函数 怎么发生异常 导致这种情况啊 就是一直能申请成功 然后在某个时刻 申请失败了??另外 我突然想 ...

构造函数异常如发生除0异常等,你说的情况我没遇到过,不清楚.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-28 08:42:13 | 显示全部楼层
拉登o睡觉 发表于 2012-9-26 21:56
我的意思 就是一直都正常 突然在申请了很多次之后 申请不成功了

会不会是在你多次申请之后,再申请出现内存越界~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-28 09:08:57 | 显示全部楼层
晓北 发表于 2012-9-28 08:42
会不会是在你多次申请之后,再申请出现内存越界~~~~~

有充足的内存 而且有充足才连续内存 为什么会越界呢??求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-28 09:30:21 | 显示全部楼层
拉登o睡觉 发表于 2012-9-28 09:08
有充足的内存 而且有充足才连续内存 为什么会越界呢??求解答

我的意思是说,动态分配出来的内存,比实际变量需要使用的内存要小~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-28 09:48:16 | 显示全部楼层
你说的含糊很,谁能知道你的是什么原因造成的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-28 10:01:32 | 显示全部楼层
晓北 发表于 2012-9-28 09:30
我的意思是说,动态分配出来的内存,比实际变量需要使用的内存要小~~~~

哦 明白了,但是 前提条件已经说了,内存充足,连续内存也充足,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-28 10:02:28 | 显示全部楼层
haiqi1025 发表于 2012-9-28 09:48
你说的含糊很,谁能知道你的是什么原因造成的?

对啊,所以 让分析所有可能的原因啊?这就是这个题的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-1 22:25:07 | 显示全部楼层
你的意思是在同一个程序里多次malloc并free吗
如果是的话有可能是堆区空余空间变得零散,使得连续空间不足
如果是只调用1次malloc的程序反复运行出现错误就不清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-2 09:16:36 | 显示全部楼层
the_one 发表于 2012-10-1 22:25
你的意思是在同一个程序里多次malloc并free吗
如果是的话有可能是堆区空余空间变得零散,使得连续空间不足 ...

比如STL中的vector,我们都知道 vector动态申请的时候,每次申请都是上次的二倍,具体怎么实现的我也没研究,在内存充足,连续空间充足的情况下,为什么还是会申请失败??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-10-2 12:48:13 | 显示全部楼层
你看看这个吧http://blog.csdn.net/hzhzh007/article/details/6424638
具体原因我也不清楚,但即使内存很大,分配给程序的堆区也不会无限大,如果是程序刚开始运行,堆区距栈区很远的情况下就申请失败那我就没法解释了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-28 11:38:09 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表