首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将char *重新赋值为null时释放内存

将char *重新赋值为null时释放内存
EN

Stack Overflow用户
提问于 2013-01-11 21:15:09
回答 2查看 106关注 0票数 0

我对c++中字符串内存的使用有点困惑。

第二次将*PChar重新赋值为NULL是否合适?分配给*PChar字符串内存的第一时间会被释放吗?

代码语言:javascript
运行
复制
char * fnc(int g)
{
...
}

char *PChar = NULL;
PChar=fnc(1);
if (PChar) { sprintf(s,"%s",PChar); } ;

*PChar = NULL;
PChar=fnc(2);
if (PChar) { sprintf(s,"%s",PChar); } ;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-12 16:17:50

首先要做的是。下面的语句不是您想要的:

代码语言:javascript
运行
复制
*PChar = NULL;
PChar=fnc(2);

您不是将null赋值给指针,而是将值零(0)赋值给所述缓冲区的第一个字符。您可能愿意这样做:

代码语言:javascript
运行
复制
   PChar = NULL;
   PChar=fnc(2);

作为一个好的编程实践,是的,你应该在null被使用之后给它赋值一个指针(也可能是内存释放)。但是将指针赋给null不会释放内存--指针不会指向已分配的内存,而是指向不存在的内存位置。如果使用new分配,则需要调用delete;如果使用malloc分配,则需要调用free

对于给定的语句,作为优化过程,编译器无论如何都会删除以下语句:

代码语言:javascript
运行
复制
 // PChar = NULL;
 PChar=fnc(2);

在使用指针时需要非常小心,并使用静态分配的数据或动态分配的缓冲区对其进行赋值!

票数 0
EN

Stack Overflow用户

发布于 2013-01-13 01:14:45

我建议声明一个PChar类型的缓冲区,并在函数调用中传递指向此缓冲区的指针。良好的编程实践cals,用于传递应在此函数中检查的缓冲区的允许长度。

代码语言:javascript
运行
复制
#define MAX_PCHAR_LEN 1024 // or constant const DWORD . . .

PChar PCharbuf[MAX_PCHAR_LEN] = {0}; // initialize array with 0s

//make a call
fnc (&PCharbuf, MAX_PCHAR_LEN, 2); // whatever 2 means

通过这种方式,您不必担心谁分配了内存,谁释放了内存,因为释放是在PCharbuf超出范围后自动进行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14278975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档