[英]C++ Class pointer dynamic array deallocate problem
#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 容器或智能指针使您的代码更简单
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.