我有一个指针指向一个类,有一个指向多维数组,但我似乎无法从内存中删除它时,我需要或将其设置为NULL。
#define X 10
#define Y 10
struct TestClass
{
public:
int *pArray[X][Y];
};
// different tries, none working:
delete Pointer_To_TestClass->pArray[0][0];
delete[] Pointer_To_TestClass->pArray[0][0]
// or by simply:
Pointer_To_TestClass->pArray[0][0] = NULL;
我知道数组中有数据,因为我可以在屏幕上看到的结果。 还要检查它是否已经NULL,则不会尝试将其删除。
因为我想在另一个指针来删除一个指针 - 这是一个特殊情况,工程不同? 像它删除第一指针保持另一个指针,而不是指针内的指针(粒子阵列是第二指针,Pointer_To_Testclass是第一指针)
UPDATE /解释
我希望能够删除粒子阵列[0] [0],而粒子阵列[0] [1]仍然存在,如果[0] [0]不存在应等于NULL。 大多数是因为我想访问该阵列由[X] [Y]为方便值。 如果[0] [0]是一个指针,它应当被删除,所以我可以检查它是否是NULL为NULL。
任何人有任何想法?
如果你想指针的二维数组<whatever>
,创建一个类来处理,然后把它的一个实例在识别TestClass。 至于如何做到这一点,我一般使用的东西这个顺序:
template <class T>
class matrix2d {
std::vector<T> data;
size_t cols;
size_t rows;
public:
matrix2d(size_t y, size_t x) : cols(x), rows(y), data(x*y) {}
T &operator()(size_t y, size_t x) {
assert(x<=cols);
assert(y<=rows);
return data[y*cols+x];
}
T operator()(size_t y, size_t x) const {
assert(x<=cols);
assert(y<=rows);
return data[y*cols+x];
}
};
class TestClass {
matrix2d<int *> array(10, 10);
public:
// ...
};
假设你存储指针,不过,你可能要考虑使用Boost ptr_vector
代替std::vector
。
#define X 10
#define Y 10
struct TestClass
{
public:
TestClass()
{
// Must initialize pArray to point to real int's otherwise pArray
// will have bogus pointers.
for (size_t y = 0; y < Y; ++y)
{
for (size_t x = 0; x < X; ++x)
{
pArray[x][y] = new int;
}
}
}
int *pArray[X][Y];
};
int main()
{
TestClass *Pointer_To_TestClass = new TestClass;
delete Pointer_To_TestClass->pArray[0][0];
Pointer_To_TestClass->pArray[0][0] = 0;
return 0;
}
取决于你的分配pArray[i][j]
如果它像pArray[i][j] = new int;
然后调用delete Pointer_To_TestClass->pArray[0][0];
。 如果它像pArray[i][j] = new int[10]
,然后用你的第二个选项, delete[] Pointer_To_TestClass->pArray[0][0];
。 我还强烈建议立即在与设置为NULL,并与检查空继续它的删除。
第三个没编译我delete[][] Pointer_To_TestClass->pArray[0][0];
我得到了错误
线34:错误:前由于-Wfatal-错误终止“[”令牌汇编预期基本表达式。
另外,我会强烈建议其在析构函数的删除。 其他地方可能被罚款以及。
您可能会发现INT *的typedef的成为可读性了解你有一个整型的二维数组*很有帮助。
如果你动态创建一个数组,然后将其删除与删除[]。 你必须给删除[]的指针数组的开始,但是,没有一个数组的元素!
如果您希望元素可删除,那么他们必须单独进行动态分配。
所以,你必须有一个指针的多维数组;
int *(*pArray)[X][Y];
然后动态分配每一个 ,这是是一种痛苦。
有趣的是,然而,你甚至试图做到这一点,你为什么要删除单个元素?
文章来源: Delete pointer to multidimensional array in class through another pointer - how?