如何解决C ++类指针动态数组解除分配问题
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define ROW 1
class Foo
{
public:
Foo()
{
this->dummy = new unsigned int[100];
}
~Foo()
{
delete[] this->dummy;
this->dummy = NULL;
}
unsigned int* dummy;
};
Foo** allocate()
{
Foo** foo_array = NULL;
foo_array = new Foo * [ROW]; //Create space for Foo addresses (row)
for (int i = 0; i < ROW; i++)
foo_array[i] = new Foo; //Create and allocate Foo for each address space(col)
return foo_array;
}
int deallocate(Foo* foo_array[ROW])
{
if (foo_array != NULL)
{
for (int i = 0; i < ROW; i++)
delete foo_array[i];
delete[] foo_array;
foo_array = NULL;
return 1;
}
return 0;
}
void main()
{
Foo** foo_array = NULL;
foo_array = allocate();
deallocate(foo_array);
if (foo_array != NULL)
printf("not null something wrong\n");
system("pause");
}
在main()函数中,一旦由deallocate(Foo * foo_array [ROW])函数执行了释放,则foo_array应该指向NULL。
但是,在deallocate(Foo * foo_array [ROW])函数中,
foo_array = NULL;
上面的语法似乎指向NULL,但是在main()函数中, foo_array不是指向NULL。
所以,我试图在deallocate(Foo * foo_array [ROW])函数中更改以上语法,
foo_array = NULL; => (*foo_array) = NULL;
它吐出写访问冲突错误。
哪里出错了?
解决方法
正确的语法为foo_array = deallocate (foo_array);
,而您的deallocate
应该返回NULL
。
我没有任何理由将foo_array
声明为指向指针的指针。在您的代码中,您正在按值传递指针。这意味着您可以更改指针所指向的内容,但不能更改指针的值。您可以使用参考来解决问题。
#include <cstdio>
#define ROW 1
class Foo
{
public:
Foo()
{
this->dummy = new unsigned int[100];
}
~Foo()
{
delete[] this->dummy;
this->dummy = NULL;
}
unsigned int *dummy;
};
void allocate(Foo *&foo_array)
{
foo_array = new Foo[ROW];
}
void deallocate(Foo *&foo_array)
{
delete[] foo_array;
foo_array = nullptr;
}
int main()
{
Foo *foo_array = nullptr;
allocate(foo_array);
deallocate(foo_array);
if (foo_array != nullptr)
printf("not null something wrong\n");
}
当然,您可以使用STL容器或智能指针使代码更简单
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。