动态内存的释放
这是C++ primer 第四版 第137叶的一个例子
代码一:
const char *pc="a very long literal string";
const size_t len=strlen(pc);
for (size_t ix=0;ix!=1000000;++ix)
{
char *pc2=new char[len+1];
strcpy(pc2,pc);
if(strcmp(pc2,pc))
;
delete []pc2; //free the monory;
}
代码二:
string str("a very long literal string");
for (int ix=0;ix!=1000000;++ix)
{
srting str2=str;
if (str!=str)
;
//str2 is automatially feed;
}
在代码一中要释放内存 为什么用delete[];而不用delete pc2;我的问题就是delete[]和delete 用在什么时候,在看有些书上是: char *p=(char*)malloc (1000); delete p; p=0;这里delete p 不就是释放p所指向的内存空间么,还是别的,望高手指教。。。。。。。。。
是不是代码一是数组的原因。
还有代码一中为什么没把pc2=0;这样不就会出现野指针了么,还是因为pc2是for里的局部变量,在for结束会系统销毁。就跟代码二str2一样会在结束后自动销毁,我不知道会不会,请高手指教,谢谢!!!
代码一:
const char *pc="a very long literal string";
const size_t len=strlen(pc);
for (size_t ix=0;ix!=1000000;++ix)
{
char *pc2=new char[len+1];
strcpy(pc2,pc);
if(strcmp(pc2,pc))
;
delete []pc2; //free the monory;
}
代码二:
string str("a very long literal string");
for (int ix=0;ix!=1000000;++ix)
{
srting str2=str;
if (str!=str)
;
//str2 is automatially feed;
}
在代码一中要释放内存 为什么用delete[];而不用delete pc2;我的问题就是delete[]和delete 用在什么时候,在看有些书上是: char *p=(char*)malloc (1000); delete p; p=0;这里delete p 不就是释放p所指向的内存空间么,还是别的,望高手指教。。。。。。。。。
是不是代码一是数组的原因。
还有代码一中为什么没把pc2=0;这样不就会出现野指针了么,还是因为pc2是for里的局部变量,在for结束会系统销毁。就跟代码二str2一样会在结束后自动销毁,我不知道会不会,请高手指教,谢谢!!!
...全文
相关推荐
动态内存的分配和释放.c
在C语言中,动态内存的分配和释放是程序设计中的一项基础技术。动态内存分配允许程序在运行时分配内存空间,这些内存空间可以根据程序的需要来确定大小,并且可以在不同的代码块中被分配和释放。
指针 分配和释放动态内存.cpp
在C++中,动态内存的管理是一项基础且关键的技术。动态内存的分配通常涉及指针,它允许程序在运行时根据需要分配内存。动态内存的管理分为两个主要操作:分配和释放内存。
单项链表的建立,插入 ,删除,显示节点信息,释放动态内存.txt
**释放链表中所有节点的内存(DeleteNode)** 遍历整个链表并释放所有节点占用的内存空间。这是管理动态内存的重要步骤,可以避免内存泄漏问题。
嵌入式软件动态内存检测工具的设计与实现_一个专为嵌入式系统设计的动态内存泄漏与越界访问检测工具_通过插装库重写标准内存管理函数并利用全局链表跟踪所有内存分配与释放操作_结合测试代理.zip
在嵌入式系统领域,动态内存管理的效率与安全性对于整个系统的稳定运行至关重要。由于嵌入式设备的资源限制,传统的动态内存检测工具往往不适用,这就需要开发专门针对嵌入式系统的工具。
内存池是一种预分配内存并进行重复利用的技术,通过减少频繁的动态内存分配与释放操作,从而提高程序运行效率。内存池通常预先分
此外,内存池还简化了内存管理的复杂性,通过将内存分配和释放的责任从系统转移到应用层,使得内存管理更加集中和高效。


