c++ - 在类中使用指针数组

标签 c++ pointers memory memory-management

我想在类中使用一个指针数组(非常大):

char* myClass::_myArray[1200000];   // 1.2 million elements

如果我在我的构造函数中新建它:

myClass::myClass()
{
   for (int n = 0; n < 1200000; n++)
   {
      _myArray[n] = new char[32];          
   }
}

然后在我的析构函数中,我处理它:

myClass::~myClass()
{
   for (int n = 0; n < 1200000; n++)
   {
      if (NULL != _myArray[n])
      {
          delete[] _myArray[n];  // exception throws here
          _myArray[n] = NULL;
      }
   }
}

总是抛异常如下图:

enter image description here

我不知道为什么。我想知道是否要为类对象预分配一个缓冲区直到它退出,我应该怎么做?这个缓冲区应该像一个全局变量一样工作,可以在调用类中的函数/方法时随时使用。

非常感谢。感谢任何意见和教育。

附加信息:

我将数组大小设置为 1000 (char* myClass::_myArray[1000]; ),它工作正常。当我将它设置为 5000 时,它会在应用程序退出后抛出这样的异常。当为120万时,应用启动时抛出异常。

delete[] _myArray[n] 是异常发生的地方,但它随机发生在 n 数。

最佳答案

 if (NULL != _myArray[n])
  {
      delete[] _myArray[n];
      _myArray = NULL;
  }

您不想在循环中将 _myArray 设置为 NULL 。事实上,您永远不想将_myArray 设置为NULL。如果 _myArray 实际上是按照您在此处显示的方式定义的(而不是 char** myClass::_myArray = new char*[1200000];),则应将其设置为 NULL编译器错误。

关于c++ - 在类中使用指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796490/

相关文章:

c - 为什么函数指针有 12 个字节长?

memory - 我想从内存中删除 PrivateKey (sun.security.rsa.RSAPrivateCrtKeyImpl) 的 secret 信息?

c++ - 类声明错误: insufficient contextual information to determine type

c++ - 按值传递或按引用传递

c++ - 如何在 C++ 中使用多个搜索值查找项目?

c++ - 为什么在单独的线程中调用成员成员函数会导致不确定的行为?

c++ - 如何链接/排队仿函数?

C++03 带 free() 的智能指针

java - OpenJDK 客户端 VM - 无法分配内存

java - 如何在不使用配置程序的情况下调整 Tomcat 5.5 JVM 内存设置