社区
C语言
帖子详情
C语言,请问为什么扩展分配内存后,再释放指针程序就无法退出了?
jdjdmn
2015-09-13 05:45:34
如果没有执行扩展分配内存,程序会正常退出,但是如果执行了的话,执行到释放指针的语句,程序就动不了了,请问这是为什么呢?
...全文
242
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语言
中,空
指针
是一个特殊的
指针
值,它不指向任何有效的内存地址。在大多数实现中,空
指针
的值被定义为(void*)0或NULLNULL是一个宏,通常在或头文件中定义,它通常
扩展
为(void*)0或0。
c语言
释放
指针
空间_C
指针
与内存管理详解
一、基础知识必学讲解
C语言
中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。1、void *calloc(int num, int size);在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。2、v...
【
C语言
数据结构2】--
指针
的简单复习
前言
指针
作为
C语言
的重点,在数据结构中也发挥了重要作用,对
指针
的理解很有助于我们实现各种数据结构。所以我觉得有必要来复习一下
指针
的内容。本次复习是假设读者已经对
指针
有了大致的了解,知道取地址符、间接寻找符等运算符的作用,知道
指针
的运算等。这次复习是对一些细节内容的复习,而且是针对数据结构学习到的内容复习。 一、字符串的
指针
字符串实际上就是字符数组,我们这里说字符串的
指针
,也就是字符数组的
指针
。...
C语言
系列9——动态内存分配与
释放
在计算机编程中,动态内存分配与
释放
是一项重要的操作。本文将介绍malloc与free这两个基本操作,探讨内存泄漏的原因及避免策略,并通过实际案例讨论动态数组的创建与管理技巧。
C语言
内存管理
本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在头文件中找到。在 C 语言中,内存是通过
指针
变量来管理的。
指针
是一个变量,它存储了一个内存地址,这个内存地址可以指向任何数据类型的变量,包括整数、浮点数、字符和数组等。C 语言提供了一些函数和运算符,使得
程序
员可以对内存进行操作,包括分配、
释放
、移动和复制等。void * 类型表示未确定类型的
指针
。C、C++ 规定 void * 类型可以通过类型转换强制转换为任何其它类型的
指针
。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章