我对c++中字符串内存的使用有点困惑。
第二次将*PChar重新赋值为NULL是否合适?分配给*PChar字符串内存的第一时间会被释放吗?
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); } ;
发布于 2013-01-12 16:17:50
首先要做的是。下面的语句不是您想要的:
*PChar = NULL;
PChar=fnc(2);
您不是将null赋值给指针,而是将值零(0)赋值给所述缓冲区的第一个字符。您可能愿意这样做:
PChar = NULL;
PChar=fnc(2);
作为一个好的编程实践,是的,你应该在null被使用之后给它赋值一个指针(也可能是内存释放)。但是将指针赋给null不会释放内存--指针不会指向已分配的内存,而是指向不存在的内存位置。如果使用new
分配,则需要调用delete
;如果使用malloc
分配,则需要调用free
。
对于给定的语句,作为优化过程,编译器无论如何都会删除以下语句:
// PChar = NULL;
PChar=fnc(2);
在使用指针时需要非常小心,并使用静态分配的数据或动态分配的缓冲区对其进行赋值!
发布于 2013-01-13 01:14:45
我建议声明一个PChar类型的缓冲区,并在函数调用中传递指向此缓冲区的指针。良好的编程实践cals,用于传递应在此函数中检查的缓冲区的允许长度。
#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超出范围后自动进行的。
https://stackoverflow.com/questions/14278975
复制相似问题