拉登o睡觉 发表于 2012-9-26 20:54:05

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

假如:有大量的数据 需要读进内存存储,但是在动态申请内存的过程中,发现申请失败了,但是此时内存还是很充足的,而且 连续内存空间也很充足,那为什么还是会申请失败呢???求大神们 给出原因啊注:请不要说 比如 代码写错了啊 内存不足啊 之类的答案谢谢!!!

晓北 发表于 2012-9-26 21:11:23

会不会是某个指针的引用不恰当~~~~~
前两天我还遇到过一个,提在这里问过的~~~

仰望天上的光 发表于 2012-9-26 21:38:39

你用malloc还是new?
如果malloc失败的话我也不能解释
如果new失败的话很可能是new的时候调用的构造函数发生了异常导致程序中止

拉登o睡觉 发表于 2012-9-26 21:52:30

仰望天上的光 发表于 2012-9-26 21:38 static/image/common/back.gif
你用malloc还是new?
如果malloc失败的话我也不能解释
如果new失败的话很可能是new的时候调用的构造函数发 ...

比如说用C++ STL模版中的vector存放读入的大量数据,但是最后申请失败 条件还是上面的给的 内存充足,而且连续内存空间充足这是为什么??

拉登o睡觉 发表于 2012-9-26 21:56:21

晓北 发表于 2012-9-26 21:11 static/image/common/back.gif
会不会是某个指针的引用不恰当~~~~~
前两天我还遇到过一个,提在这里问过的~~~

我的意思 就是一直都正常 突然在申请了很多次之后 申请不成功了

仰望天上的光 发表于 2012-9-26 22:14:47

拉登o睡觉 发表于 2012-9-26 21:52 static/image/common/back.gif
比如说用C++ STL模版中的vector存放读入的大量数据,但是最后申请失败 条件还是上面的给的 内存充足,而且 ...

你vector里存放的是什么?基本数据类型还是类类型?如果是类类型应该检查下该类型的构造函数

拉登o睡觉 发表于 2012-9-26 22:24:00

仰望天上的光 发表于 2012-9-26 22:14 static/image/common/back.gif
你vector里存放的是什么?基本数据类型还是类类型?如果是类类型应该检查下该类型的构造函数

基本数据类型,这是我面试**搜索公司 问的问题,我的第一回答 是没有连续的内存空间了,他告诉我有连续的内存空间,而且还很充足,想想其它的原因,然后我就说不出来了!

拉登o睡觉 发表于 2012-9-27 09:40:41

仰望天上的光 发表于 2012-9-26 21:38 static/image/common/back.gif
你用malloc还是new?
如果malloc失败的话我也不能解释
如果new失败的话很可能是new的时候调用的构造函数发 ...

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

仰望天上的光 发表于 2012-9-27 11:36:49

拉登o睡觉 发表于 2012-9-27 09:40 static/image/common/back.gif
构造函数 怎么发生异常 导致这种情况啊 就是一直能申请成功 然后在某个时刻 申请失败了??另外 我突然想 ...

构造函数异常如发生除0异常等,你说的情况我没遇到过,不清楚.

晓北 发表于 2012-9-28 08:42:13

拉登o睡觉 发表于 2012-9-26 21:56 static/image/common/back.gif
我的意思 就是一直都正常 突然在申请了很多次之后 申请不成功了

会不会是在你多次申请之后,再申请出现内存越界~~~~~

拉登o睡觉 发表于 2012-9-28 09:08:57

晓北 发表于 2012-9-28 08:42 static/image/common/back.gif
会不会是在你多次申请之后,再申请出现内存越界~~~~~

有充足的内存 而且有充足才连续内存 为什么会越界呢??求解答

晓北 发表于 2012-9-28 09:30:21

拉登o睡觉 发表于 2012-9-28 09:08 static/image/common/back.gif
有充足的内存 而且有充足才连续内存 为什么会越界呢??求解答

我的意思是说,动态分配出来的内存,比实际变量需要使用的内存要小~~~~

haiqi1025 发表于 2012-9-28 09:48:16

你说的含糊很,谁能知道你的是什么原因造成的? {:5_105:}

拉登o睡觉 发表于 2012-9-28 10:01:32

晓北 发表于 2012-9-28 09:30 static/image/common/back.gif
我的意思是说,动态分配出来的内存,比实际变量需要使用的内存要小~~~~

哦 明白了,但是 前提条件已经说了,内存充足,连续内存也充足,

拉登o睡觉 发表于 2012-9-28 10:02:28

haiqi1025 发表于 2012-9-28 09:48 static/image/common/back.gif
你说的含糊很,谁能知道你的是什么原因造成的?

对啊,所以 让分析所有可能的原因啊?这就是这个题的目的

the_one 发表于 2012-10-1 22:25:07

你的意思是在同一个程序里多次malloc并free吗
如果是的话有可能是堆区空余空间变得零散,使得连续空间不足
如果是只调用1次malloc的程序反复运行出现错误就不清楚了

拉登o睡觉 发表于 2012-10-2 09:16:36

the_one 发表于 2012-10-1 22:25 static/image/common/back.gif
你的意思是在同一个程序里多次malloc并free吗
如果是的话有可能是堆区空余空间变得零散,使得连续空间不足 ...

比如STL中的vector,我们都知道 vector动态申请的时候,每次申请都是上次的二倍,具体怎么实现的我也没研究,在内存充足,连续空间充足的情况下,为什么还是会申请失败??

the_one 发表于 2012-10-2 12:48:13

你看看这个吧http://blog.csdn.net/hzhzh007/article/details/6424638
具体原因我也不清楚,但即使内存很大,分配给程序的堆区也不会无限大,如果是程序刚开始运行,堆区距栈区很远的情况下就申请失败那我就没法解释了

阔怀 发表于 2015-8-28 11:38:09

{:1_1:}
页: [1]
查看完整版本: 为什么会有内存申请失败??跪求解答