c++动态内存指针的问题?
发布网友
发布时间:2022-05-02 15:37
我来回答
共4个回答
热心网友
时间:2022-06-20 16:55
delete p仅释放p指向的内存空间,但p的值没变,p也就成了常说的野指针。
delete p后,如果还要用到p,必须p=null或赋其他值
热心网友
时间:2022-06-20 16:56
要解决这个问题,就要弄懂指针
内存那种每个字节都有一个唯一的地址,变量存在内存中自然就会有一个地址。
指针也是一个变量,里面存着一个地址,就是直接输出指针输出的那些(cout<<p);这个地址的位置也存着一些东西,就是加上取值符输出的(cout<<*p)
还要弄懂delete的过程
编译器只是告诉自己,这个地址的位置可以放其他东西了。
但这里的东西没有被清理掉,这阵里存的地址也没有被清理掉,你再输出时,仍然可以找到那个东西;
BUT:
有些编译器为了在因此而出现错误时,你能更快地发现错误,在delete后会更改指针里存的地址,或那个地址的位置存的东西。
这些有关底层实现的东西,如果想彻底弄懂,建议简单学一下计算机基础或汇编
热心网友
时间:2022-06-20 16:56
用delete释放掉指针p后就不允许在用p了,如果在用那是非常危险的事情,P会变成野指针,在用的话应该重新用new申请内存空间。
热心网友
时间:2022-06-20 16:57
delete函数理论上是释放内存空间并且xigounew 但是你用while 所以p被占用
delete不会被执行。
C语言动态内存分配的疑问
1、你关于一维数组和指针是理解正确了,但二维(指针的指针)理解还不到位,需要再多看书。例如字符指针是 char *str 定义的,这是一维的指针,指针是变量,指针变量里面存储的是字符串的起始地址。而二维的指针,即指针的指针,是定义了又一个指针,指向的是指针变量,例如 char **str 的意思是:...
C语言动态内存函数分配问题
你的问题是刚刚学习指针的人都有的问题,需要从地址来认识这个问题,C语言的数据都是需要申请空间来存放的,有静态和动态两种,动态分配的空间大小可以按需要分配,并且可以回收,静态是不可以回收的。首先,分配动态的空间,指针P和空间的首地址是没有直接的联系的,只是为了手续要使用这个刚刚分配的空间才...
C语言为字符指针(char*)分配动态内存空间(malloc),为什么空间不发生变 ...
char*是指针,你获取指针(地址)的长度,32位机器当然是4。C语言malloc分配出来的内存是不能通过sizeof获取长度的。
C语言结构体数组动态内存分配的问题?
realloc调用需要两个参数。另外,函数返回的结果,需要检测才能使用。如果realloc申请内存失败,会返回null
为何指针变量分配动态空间后,其指向的变量可以直接当数组用??
指针:可以没有类型。void的时候,算是没有类型,没有给出单元的大小,虽然void某种程度上是一种类型。可以指向动态内存。指针所指向的未必是动态内存,但可以是动态内存。动态内存是在堆里面分配的,一般是用malloc,calloc,或者realloc,来分配。动态内存是需要用free()来释放的,静态内存一定不要用free(...
...为什么一运行就出现"ox0040254e"指令引用的"ox00427020"内存...
二、应用程序由于自身BUG引用了不正常的内存指针 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被...
C语言中的动态内存分配的用法举例
1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,...
0x000009c的错误状态而无法将请求数据放入内存
【勾好】,应用,确定看看效果。如果你是因为应用程序没有检查内存分配失败,或者应用程序由于自身BUG引用了不正常的内存指针,或者是系统中了木马或病毒,或者是浏览器打开出现的问题,最管用的一招就是: 开始→运行→输入cmd→回车,在命令提示符下输入下面命令for %1 in (%windir%\system32\*.dll)...
出现“0x031731c9”指令引用的”0x0000001f"内存。该内存不能为“read...
假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。 4、微软WINDOWS系统的漏洞,windows把内存地址0X00000000到0X0000ffff指定为分配null指针的地址范围,如果程序试图访问这一地址,则认为是错误。c/c++编写的程序通常不进行严格的错误...
c语言为什么要关心和内存申请和释放,感觉不管也没什么问题啊?
C 语言的这种手动管理内存的特性,意味着程序员必须对内存的生命周期和使用负责,这也是 C 语言的一个核心特点。如果不加以控制,内存问题会让程序非常不稳定。如何正确管理内存 及时释放内存:在用完动态分配的内存之后,及时调用 free() 来释放内存。避免悬空指针:释放内存之后,将指针置为 NULL,以防止...