社区
C语言
帖子详情
C语言,请问为什么扩展分配内存后,再释放指针程序就无法退出了?
jdjdmn
2015-09-13 05:45:34
如果没有执行扩展分配内存,程序会正常退出,但是如果执行了的话,执行到释放指针的语句,程序就动不了了,请问这是为什么呢?
...全文
238
10
打赏
收藏
C语言,请问为什么扩展分配内存后,再释放指针程序就无法退出了?
如果没有执行扩展分配内存,程序会正常退出,但是如果执行了的话,执行到释放指针的语句,程序就动不了了,请问这是为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lm_whales
2015-09-15
打赏
举报
回复
引用 7 楼 u014626834 的回复:
可是我输入了11个数据,还是正常显示了呢?
1)C内存分配策略,是分配足够的内存,而不是恰到好处的内存。 2)内存越界的结果,可能是破坏为管理内存,而设定的数据结构,未必一定会抛出异常。 3)编译期间,和程序运行期间不报错,不代表程序没有错误。
赵4老师
2015-09-14
打赏
举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
www_adintr_com
2015-09-13
打赏
举报
回复
内存访问越界的后果是行为未定义的,程序可能产生这种异常,也可能产生那种异常,也可能没有异常
jdjdmn
2015-09-13
打赏
举报
回复
可是我输入了11个数据,还是正常显示了呢?
www_adintr_com
2015-09-13
打赏
举报
回复
realloc 的参数不是增加多少内存,而是增加到多少 你永远只分配 10 个 int,当数据超过 10 个就出现内存访问越界了
jdjdmn
2015-09-13
打赏
举报
回复
请帮我看看,谢谢!
jdjdmn
2015-09-13
打赏
举报
回复
#include <stdio.h> #include <malloc.h> int main(void) { int *p = (int*)calloc(10, sizeof(int)); if (!p) { printf("内存分配错误!\n"); return 0; } int *ptemp = { NULL }; int i = 0; int j = 0; printf("请输入:\n"); for (i = 0;;) { scanf_s("%d", (p + i)); getchar(); ++j; if (i % 9 == 0) { ptemp = (int*)realloc(p, 10 * sizeof(int)); if (!ptemp) { printf("上限内存分配错误!\n"); free(p); p = NULL; return 0; } p = ptemp; } if (*(p + i) == 9999) { break; } ++i; } printf("\n\n下面进行输出:\n\n"); for (i = 0; i < j; ++i) { printf("%d ", *(p + i)); } free(p); p = NULL; return 0; }
宋寒松
2015-09-13
打赏
举报
回复
说明内存分配和指针应用上出问题了。
漠北老将
2015-09-13
打赏
举报
回复
show me the code
www_adintr_com
2015-09-13
打赏
举报
回复
因为程序中有 BUG
c语言
释放
指针
空间_C
指针
与内存管理详解
本文介绍了
C语言
中动态内存管理的基础知识,包括calloc、malloc、realloc和free函数的使用。通过示例展示了如何动态分配和
释放
内存,以及如何调整内存大小。强调了在不再需要内存时应及时调用free函数
释放
内存的重要性。
C语言
基础-空
指针
本文介绍了
C语言
中空
指针
的概念,如何正确初始化和检查
指针
,以及避免空
指针
相关问题的策略,包括初始化
指针
、检查有效性、
释放
内存后的
指针
处理等。
【
C语言
数据结构2】--
指针
的简单复习
本文是关于
C语言
指针
的复习,主要涵盖字符串的
指针
表示及其区别、动态内存分配函数(malloc、calloc、realloc、free)的使用,以及
指针
的多种初始化方式。通过实例代码解释了字符
指针
和字符数组的不同,以及如何在堆栈中动态分配和管理内存。
C语言
系列9——动态内存分配与
释放
本文详细介绍了
C语言
中malloc和free函数的使用,探讨了内存泄漏的原因与避免策略,并通过实际案例展示了动态数组的创建、管理、
扩展
与注意事项,强调了正确内存管理在
程序
性能和稳定性中的重要性。,
C语言
内存管理
本文详细介绍了
C语言
中的动态内存管理,涉及malloc、calloc、free和realloc等函数的使用,以及如何通过
指针
和内存操作进行内存的分配、
释放
和调整。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章