[英]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.