求教:malloc申请的内存内存申请总量的问题

C语言,用malloc为结构指针申请内存失败_百度知道
C语言,用malloc为结构指针申请内存失败
在创建链表的过程中,第一次可以正常申请,第二次就失败了,但是单步调试就没问题,这是怎么回事啊
我有更好的答案
这个看不到代码没法说啊一般malloc失败要么是分配的内存太大(这个一般不会发生其实……)要么是malloc过于频繁导致没有复合大小的连续区域(只是链表struct的话应该也不至于)再有么要么就是malloc前后的操作中有越界?
采纳率:41%
把代码贴上来看看,还是有哪块写得不对
代码太长了,现在是有时候能正常运行,有时候会崩溃
一般这种情况,要么用了未赋值的空指针,要么就是内存越界了,你慢慢找找吧
谢谢,已经找到了
内存破坏了?
为您推荐:
其他类似问题
malloc的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。有关于malloc申请内存和free内存释放 - 极客先锋 - 博客园
malloc工作机制:
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表(堆内存)。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。
程序占用三种类型的内存:静态内存、栈内存、堆内存;
  静态内存:用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量
  栈内存:用来保存定义在函数内的非static对象。分配在静态内存或栈内存中的对象由编译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁。
  堆内存:在程序运行时分配。动态对象的生存周期由程序(用户)来控制。
关于使用free()函数释放内存后实际数据是否存在的问题
关于用malloc分配的内存,在调用free释放后,该内存的状态,有以下几点说明:
1.调用free释放掉所分配的内存后,表明该内存可以被别人使用,也就是说,其他地方调用malloc后,可以分配到该内存
2.关于free释放该内存后,该内存中的数据,我们只能认为是脏数据;也就是说,这部分数据可能存在并且维持原来的值,也可能被清空,或者被修改为其他值;
3.在释放了该内存后,除了要对当时分配的指针赋值为NULL,还要注意不要再去引用这部分内存,不要尝试获取这部分的值,这些已经非法。
4.内存free后,里面的数据还是在的,只是这块内存会被标记为可用的内存,别的程序可以用这块内存里面的数据可能存在,只要该内存没有被别的地方占用。你free释放的是内存的使用权。
1 #include &stdio.h&
2 #include &stdlib.h&
4 struct stu1{
//所在小组
<span style="color: # };
<span style="color: #
<span style="color: # int main(){
<span style="color: #
//给结构体成员赋值
<span style="color: #
struct stu1 *stu1;
<span style="color: #
<span style="color: #
stu1 = malloc(sizeof(struct stu1));
<span style="color: #
stu1-&name = "Tom";
<span style="color: #
stu1-&num = <span style="color: #;
<span style="color: #
stu1-&age = <span style="color: #;
<span style="color: #
stu1-&group = 'A';
<span style="color: #
stu1-&score = <span style="color: #6.5;
<span style="color: #
//读取结构体成员的值
<span style="color: #
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1-&name, stu1-&num, stu1-&age, stu1-&group, stu1-&score);
<span style="color: #
printf("%p\n",stu1);
<span style="color: #
free(stu1);
<span style="color: #
<span style="color: #
scanf("%p",&stu1);
<span style="color: #
printf("%p\n",stu1);
<span style="color: #
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1-&name, stu1-&num, stu1-&age, stu1-&group, stu1-&score);
<span style="color: #
return <span style="color: #;
<span style="color: # }
随笔 - 276当前位置:
malloc申请内存的时候出现如下错误,是什么原因造成的呢?
malloc申请内存的时候出现如下错误,是什么原因造成的呢?
来源:网络整理&&&&&时间: 12:45:50&&&&&关键词:
关于网友提出的“ malloc申请内存的时候出现如下错误,是什么原因造成的呢?”问题疑问,本网通过在网上对“ malloc申请内存的时候出现如下错误,是什么原因造成的呢?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: malloc申请内存的时候出现如下错误,是什么原因造成的呢?
malloc.c:3096:&sYSMALLOc:&Assertion&`(old_top&==&(((mbinptr)&(((char&*)&&((av)-&bins[((1)&-&1)&*&2]))&-&__builtin_offsetof&(struct&malloc_chunk,&fd))))&&&&old_size&==&0)&||&((unsigned&long)&(old_size)&&=&(unsigned&long)((((__builtin_offsetof&(struct&malloc_chunk,&fd_nextsize))+((2&*&(sizeof(size_t)))&-&1))&&&~((2&*&(sizeof(size_t)))&-&1)))&&&&((old_top)-&size&&&0x1)&&&&((unsigned&long)old_end&&&pagemask)&==&0)'&failed.
是不是我的内存不够呢,我从两个文本中读取数据进行处理
每个文本都有几十万行的数据。
我使用小一些的文本进行编译运行,一切正常。但是一旦使用这个文本,就报这个错误
我想请问一下,是我的内存不够导致的吗?解决方案1:
你的是不是const啊?&返回是NULL,说明申请失败&不是空间不足
这样&你申请小一点的空间看看解决方案2:
malloc错误是返回NULL的,不像内存不足~
解决方案3:
几十万也就是M级别的,如果是堆或者全局变量,不会不够的,上G都可以。
解决方案4:
可能有内存泄漏或者内存越界、野指针之类的问题,数据少的时候可能没暴露出来。
仔细查代码吧。
LZ用的到底是数组,还是malloc,还是都用?
以上介绍了“ malloc申请内存的时候出现如下错误,是什么原因造成的呢?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2772077.html
上一篇: 下一篇:他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 malloc无法申请到内存 的文章

 

随机推荐