void指针怎么释放(c/c++怎么用free释放二级指针)

:暂无数据 2026-07-24 18:30:07 2

void指针怎么释放(c/c++怎么用free释放二级指针)

其实void指针怎么释放的问题并不复杂,但是又很多的朋友都不太了解c/c++怎么用free释放二级指针,因此呢,今天小编就来为大家分享void指针怎么释放的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

c/c++怎么用free释放二级指针

#include 《string.h》
#include 《stdio.h》
#include 《malloc.h》

#define BOOL int
#define FALSE 0
#define TRUE 1

BOOL GetStrBuf(char **ppBuf, int nLen)
{
(*ppBuf) = (char *)malloc(nLen * sizeof(char));

return ((NULL == (*ppBuf)) ? FALSE : TRUE);
}

void FreeStrBuf(char **ppBuf)
{
if (NULL != (*ppBuf))
{
free((*ppBuf));
(*ppBuf) = NULL;
}
}

int main(void)
{
char *pBuf = NULL;
char *pData = "Hello, wrold !";
int nLen;
BOOL bRet;

nLen = strlen(pData);

// get buf for pBuf
bRet = GetStrBuf(&pBuf, nLen+1);

// if get buffer fail
if (!bRet)
{
printf("malloc for string buf fail !/n");
return -1;
}
// clear the buffer for copy
memset(pBuf, 0, nLen+1);

strncpy(pBuf, pData, nLen);
printf("pData is: %s/n", pData);
printf("pBuf is: %s/n", pBuf);

// free had malloc mem buf
FreeStrBuf(&pBuf);
// then the pBuf = NULL, 0x0

return 0;
}

c++队列元素含指针怎么释放

#pragma once //用数组实现的循环队列//SeqQueue.h#include "stdafx.h"#include "Windows.h"#include "stdlib.h"#include "iostream.h"template《class T》class SeqQueue{private: T *queue; int front,rear,MaxSize;public: SeqQueue(int sz=30);//构造函数 SeqQueue(SeqQueue& sq);//拷贝构造函数 SeqQueue(int arraysz,T *a,int sz=30);//构造函数 void MakeEmpty();//清空队列 bool IsEmpty();//队列是否为空 int GetLength();//获得长度 int GetMaxSize();//获得队列大小 T &GetFront();//获得队首元素 bool EnQueue(T &x);//入队 bool OutQueue(T &x);//出对 void show(); ~SeqQueue();//析构函数}; template《class T》SeqQueue《T》::SeqQueue(int sz){ queue=new T; rear=(rear+1)%MaxSize; }} template《class T》void SeqQueue《T》::MakeEmpty(){ front=rear=0;} template《class T》bool SeqQueue《T》::IsEmpty(){ return front==rear;} template《class T》int SeqQueue《T》::GetLength(){ return ((rear-front)+MaxSize)%MaxSize;} template《class T》int SeqQueue《T》::GetMaxSize(){ return MaxSize;}

C++ 函数返回指针的释放问题,如何释放

func这样写的话,就是要求调用func的函数来释放p
因为func在main中被调用,而又main来释放,没有问题
因为free语句是main的最后一句,就算不写,程序结束的时候也会自动回收
不过其他场合,只要程序不终结,就必须手动free掉,不然内存就泄漏了
main里面的s是什么东西,应该用不着吧

C++动态内存在函数中释放

可以,你要把指针保存起来!
很简单啊,你要是声明为函数内局部,你就在函数里释放;
你一定要在函数外释放的话,把指针声明在类中,造构时置NULL,在函数中检测不为NULL则分配。在析构中,不为NULL就释放,释放完记得再置NULL!或专门定义一个释放它的函数,在析构中调用!这方法很常用!
还可以用参数来返回!反正就是,你想在函数外完成释放,就应该在函数外有一个指针,然后函数内必须可以操作这个指针,对它进行分配内存等等,不管你是怎么传它到函数里!
//这种写法没见过!
char fok()
{
return new char(’a’);
}

怎么释放vector容器中的指针

  调用clear清楚容器中的指针的时候,系统会自动释放指针所指的对象,用不着程序员操作。就你的具体问题摘了段STL源码。注释过了,应该能看懂。
  void clear() { erase(begin(), end()); } iterator erase(iterator first, iterator last) { iterator i = copy(last, finish, first); destroy(i, finish);// 全局函数,销毁元素的基本函数。 finish = finish - (last - first); return first; }// 以下是 destroy() 第二版本,接受两个迭代器。// 这里用到了traits技术,判断型别,以便用不同的方式析构对象,不了解traits略过就可以template 《class ForwardIterator》inline void destroy(ForwardIterator first, ForwardIterator last) { __destroy(first, last, value_type(first));}// 判断元素的数值型别(value type)是否有 trivial destructortemplate 《class ForwardIterator, class T》inline void __destroy(ForwardIterator first, ForwardIterator last, T*) { typedef typename __type_traits《T》::has_trivial_destructor trivial_destructor; __destroy_aux(first, last, trivial_destructor());}// 如果元素的数值型别(value type)有 non-trivial destructor…对应与类,此时无法直接大块释放内存// 当为内置数值如int等,可以直接大片释放内存来提高效率template 《class ForwardIterator》inline void__destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) { for ( ; first 《 last; ++first) destroy(&*first); //这里是一个指针,也就是你容器中的元素}// 以下是 destroy() 一个版本,接受一个指针。template 《class T》inline void destroy(T* pointer) { pointer-》~T();// 使用析构函数,}

C++ void* 托管指针能正确释放内存吗

CSonType* son = new CSonType;
void *pVoid = son;
delete pVoid;

无论是否托管代码,将对象指针赋给无类型指针void*,c++在释放掉这个对象时,不会针对对象内动态分配的内存做任何释放操作。哪怕析构函数是虚函数,   也不会被调用

// 正确的释放内存方式
CFatherType* pFather = (CFatherType *) pVoid;
delete pFather;

将这个无类型指针转而赋值给CFatherType*,编译器知道了具体的对象类型,才能针对性进行对象内部分配的动态内存进行释放。

只有对对象指针进行delete操作,C++才会自动调用对象的析构函数。

如果满意,欢迎采纳,谢谢

如有疑问,欢迎追问

void类型的函数怎么结束

1、直接使用return;语句就可以了。

void类型函数只是没有返回值,不代表不能使用return返回。

2、return表示中止当前函数的运行,并将操作权返回给调用者。

如果是在main函数中,表示将操作权返回给操作系统,return 不是必须要返回一个值。当然,就算不写return,在函数执行完毕后也会返回操作权给调用者。

扩展资料:

void关键字的使用规则:

1、如果函数没有返回值,那么应声明为void类型

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。

2、如果函数无参数,那么应声明其参数为void

3、小心使用void指针类型

按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作。

C语言中是如何释放内存单元的;原理又是什么

C管理内存大致可以理解为两种,分配在栈上的,一个是分配在堆上的。

临时变量,动态变量,分配在栈上,运行完,直接弹出栈,就没了。
分配在堆上的内存,释放的时候,基本上可以理解为,指针不指这里了。也就失去了对这块内存的控制。其实所谓的释放。字面意思容易让人理解错。
有些机器有些操作系统,会在释放的时候清空这段内存,但是这种做法效率不高,但是安全,很少有机器这么做,多数都是所谓释放,就是不让你控制这块内存了而已。

C语言如何释放指针

C语言中可以使用free函数释放指针。
1、free函数:
原型:void
free(void
*ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存。
2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:
int
*a
=
NULL
int
*b
=
(int*)
malloc(sizeof(int)
*
10);
a=
b;
/*
执行大量操作后
*/
if(a
!=
NULL)
{free(a);a=NULL;}
if(b
!=
NULL)
{free(b);b=NULL;}

C++指针内存释放问题

C++中指针在new和delete操作的时候对内存堆做的如下
1、指针的new操作:
指针在new之后,会在内存堆中分配一个空间,而指针中存放的是这个空间的地址。如:
void main(){
int *p = new int(4);
cout 《《 p 《《 endl;
cout 《《 *p 《《 endl;
}
输出为:
0x00431BF0
4
分别为分配的空间地址和地址内存放的值。
如果写为:
void main(){
int *p = new int(4);
cout 《《 *(int *)0x00431BF0 《《 endl;
}
输出为:4
程序的意思就是将0x00431BF0内存地址开始的4个byte的块取出转换为int类型输出,即直接读取内存。
2、指针的delete操作:
指针在delete的时候,会将指针指向的内存区域释放掉,而指针同内存区域的联系并没有被切断,仍然会只想原来指向的内存区域。如:
void main(){
int *p = new int(4);
cout 《《 p 《《 endl;
cout 《《 *p 《《 endl;
delete p;
cout 《《 p 《《 endl;
cout 《《 *p 《《 endl;
}
程序输出:
0x00431BF0
4
0x00431BF0
-572662307
可以看到p前后指向的地址是相同的,而指向地址的内存区域被释放。
3、空指针:
空指针指向的内存区域为内存的首地址,是不可读写的区域,即空指针不提供操作。删除空指针是安全的(因为它什么也没做)。所以,在写构造函数,
赋值操作符,或其他成员函数时,类的每个指针成员要么指向有效的内存,要么就指向空,那在你的析构函数里你就可以只用简单地delete 掉他们,而不用
担心他们是不是被new 过。如:
void main(){
int *p = NULL;
cout 《《 p 《《 endl;
} //输出0x00000000
4、取出内存区域的值
在取某内存地址开始的一个区域的值的时候,取出的值取决于用来取值的类型,譬如int为4个byte,char为1个byte,程序如:
void main(){
int a = {261,0};
int *pi = a;
char *p = (char*)pi;
cout 《《 *(int *)p++ 《《 endl; //取出p地址,转化为取4个byte,并取出内容,之后p向后移动一位
cout 《《 *(int *)p 《《 endl; //取出p地址,转化为取4个byte,并取出内容
cout 《《 (int)*p 《《 endl; //取出1个char类型,并转换为int型
cout 《《 (int)*(char *)pi 《《 endl; //取出pi地址,转换为char类型,取出内容,并转换为int型
}
程序输出:
261
1
1
5
a的存储区域安排为:byte1=5,byte2=1,byte3~byte8 = 0;
所以*(int *)p++取的为byte1到byte4; 之后的*(int *)p取的是byte2到byte5;
(int)*p取的是byte2;(int)*(char *)pi取的是byte1,之后转换为int型。

c/c++怎么用free释放二级指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c/c++怎么用free释放二级指针、c/c++怎么用free释放二级指针的信息别忘了在本站进行查找哦。

void指针怎么释放(c/c++怎么用free释放二级指针)

本文编辑:admin

更多文章:


androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

本篇文章给大家谈谈androidapp源码免费下载,以及如何实现APK的反编译得到APK的源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 18:00

security的反义词(risk的反义词)

security的反义词(risk的反义词)

大家好,今天小编来为大家解答以下的问题,关于security的反义词,risk的反义词这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 15:40

二郎神杨戬简笔画(二郎神怎么画)

二郎神杨戬简笔画(二郎神怎么画)

本篇文章给大家谈谈二郎神杨戬简笔画,以及二郎神怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:50

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

大家好,关于service pack 3很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思的知识点,相信应该可以解决大家的一

2026年9月22日 10:20

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

本篇文章给大家谈谈html代码怎么写大佬教程,以及html网页的题来个大佬,写代码,题目在图上对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:10

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

本篇文章给大家谈谈结构体内又一个struct,以及c++ 在结构体中再嵌入一个结构体如何调用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 09:40

next是什么意思英语(next是什么单词)

next是什么意思英语(next是什么单词)

本篇文章给大家谈谈next是什么意思英语,以及next是什么单词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 07:50

美国参议院人数(美国每个州的议员人数取决于什么)

美国参议院人数(美国每个州的议员人数取决于什么)

大家好,今天小编来为大家解答以下的问题,关于美国参议院人数,美国每个州的议员人数取决于什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 05:20

高中信息技术python(高考信息技术用的是什么语言)

高中信息技术python(高考信息技术用的是什么语言)

今天给各位分享高考信息技术用的是什么语言的知识,其中也会对高考信息技术用的是什么语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 02:50

cocos creator中文(cocoscreator和cocoscreator3d的区别)

cocos creator中文(cocoscreator和cocoscreator3d的区别)

各位老铁们好,相信很多人对cocos creator中文都不是特别的了解,因此呢,今天就来为大家分享下关于cocos creator中文以及cocoscreator和cocoscreator3d的区别的问题知识,还望可以帮助大家,解决大家的

2026年9月22日 02:30

最近更新

如何制作简单的wap网页
2026-09-22 21:32:02 浏览:0
长沙在线网站优化效果如何?
2026-09-22 21:31:24 浏览:0
移动网站设计如何实现响应式布局?
2026-09-22 21:31:04 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:14
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表