社区
C语言
帖子详情
C语言,请问为什么扩展分配内存后,再释放指针程序就无法退出了?
jdjdmn
2015-09-13 05:45:34
如果没有执行扩展分配内存,程序会正常退出,但是如果执行了的话,执行到释放指针的语句,程序就动不了了,请问这是为什么呢?
...全文
221
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语言
指针
专题ppt.ppt
* 静态内存:编译器负责分配,
程序
退出
时
释放
,不用
程序
员参与 * 栈内存:函数调用时分配,函数
退出
时
释放
,不用
程序
员参与 * 堆内存:
程序
员根据需要用malloc创建的内存在适当时机由
程序
员用free
释放
五、变量的...
c语言
难点分析整理,
C语言
- **正确使用`malloc()`,`calloc()`,`realloc()`和`free()`**:确保在
分配内存
后,分配失败时处理异常,分配成功后立即检查
指针
是否为NULL。
释放
内存时,避免
释放
未分配的内存或已
释放
的内存。 - **内存对齐**:...
链表的
C语言
实现之动态内存分配
释放
内存后,不应再通过已
释放
的
指针
访问内存,否则可能导致未定义的行为,例如内存泄漏或
程序
崩溃。例如: ```c free(ptr); ptr = NULL; // 可选,将
指针
设为 NULL 避免后续误用 ``` 在链表的实现中,动态内存...
你必须知道的495个
C语言
问题
为什么这些问题如此频繁地出现? 5.15 有没有什么简单点儿的办法理解所有这些与空
指针
有关的东西呢? 5.16 考虑到有关空
指针
的所有这些困惑,要求它们的内部表示都必须为0不是更简单吗? 5.17 说真的,真有...
第11章 动态数据结构的
C语言
实现-常见的内存错误1
4. **
释放
了内存,却继续使用它**:
释放
内存后仍使用该内存的
指针
称为悬空
指针
,可能导致
程序
崩溃或其他严重问题。
释放
内存后,最好将
指针
设为NULL,以防止后续误用。同时,要注意多个
指针
指向同一内存块时,
释放
后...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章