gpt4 book ai didi

c++ - 我可以创建一个 C++ "zap"函数来处理一个指针,如果它没有分配内存吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:23 24 4
gpt4 key购买 nike

我编写了一个 zap() 函数来释放一维数组,如下所示。

void zap(double *(&data))
{
if (data != NULL)
{
delete [] data;
data = NULL;
}
return;
}

我的印象是 if data != NULL 不会尝试释放从未分配的内存,但我认为我错了。我遇到以下实现问题。

void fun()
{
int condition = 0;
double *xvec;
double *yvec;
allocate_memory_using_new(yvec); //a function that allocates memory
if (condition == 1) allocate_memory_using_new(xvec);
//some code
//deallocate memory:
zap (yvec);
zap (xvec); //doesn't work
return;
}

输出如下:

 Unhandled exception at 0x6b9e57aa (msvcr100d.dll) in IRASC.exe: 0xC0000005: Access
violation reading location 0xccccccc0.

所以我意识到,当指针显然从未实际使用过时,尝试调用 zap 并不是一件可取的事情。我只是想知道是否有办法在 zap() 函数中的某个点检查指针的地址以避免异常。预先感谢您的帮助和见解!

最佳答案

指针不会神奇地初始化为 0,只有当它们是全局或静态时。 需要这样做:

double *xvec = NULL;
double *yvec = NULL;

如果您不这样做,它们将包含随机垃圾,这些垃圾会留在创建它们的堆栈中。而这种垃圾大部分时间不是 NULL

此外,您不需要检查 NULL,因为在这种情况下 delete 是空操作:

double* xvec = NULL;
delete xvec; // perfectly valid

此外,如果您使用的是 Visual Studio 2010,我建议使用 nullptr 而不是 NULL

关于c++ - 我可以创建一个 C++ "zap"函数来处理一个指针,如果它没有分配内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com