【问题标题】:Dynamic memory allocation initialisation in C++ classC++ 类中的动态内存分配初始化
【发布时间】:2015-11-08 11:47:08
【问题描述】:

(我没有发布我的代码,因为这是一个项目,但是我试图为这个问题寻求帮助但没有运气)

您好,我正在尝试初始化指针数组 (char*) 的大小,这是我的类 class A 的私有成员变量

我正在使用构造函数通过设置一个整数变量(也是一个成员变量)来设置大小,然后该变量将用于创建我的指针数组。

到目前为止我已经这样做了:

// Constructor - 'int value' is set to a value
private:
    int value;
    char ** myArray = new char*[value];

所以基本上我想要一个指针数组,其中每个元素都可以指向一个字符串。我通过使用 (char*) stringVar.c_str(); 将字符串变量传递给myArray

虽然所有这些都有效,但我在尝试存储变量时遇到了一些非常奇怪的错误,甚至出现了这个错误:

free():下一个尺寸无效(快)

这很奇怪,因为即使 myArray 的大小为 4,当我尝试访问第三个元素时,我也会遇到与上述相同的错误。

我对 C++ 非常陌生,并且非常想解决这些问题。我不得不求助于这个论坛寻求帮助,并期待你们的一些想法:)

【问题讨论】:

  • 使用std::vector<std::string> 似乎更好。
  • 你可能试图释放一个不是由 malloc 分配的指针(或删除一个不是由 new 创建的对象),或者你可能试图释放/删除这样一个对象超过一次。
  • 我怀疑编译器不喜欢“new char*[]”位。为什么不尝试类似:“char *myArray = new char[value];”

标签: c++ arrays string pointers dynamic


【解决方案1】:

如果您是新的 C++ 程序员并希望使用 C++ 字符串列表,最好使用 std::vector<std::string> 以获取有关如何使用向量的完整教程,请参阅: http://www.cplusplus.com/reference/vector/vector/

但是你的问题是字符串列表大小是固定的吗? 如果字符串列表不固定,则必须首先在构造函数中为数组分配空间,然后在您想在字符串列表中插入字符串时重新分配数组,例如:

 class A{
   private:
         char** arrayy;
         int arrayysize;
   A(){
    arrayy = (char**)calloc(1,sizeof(char*));
    arrayysize = 1;
   }
   insertToarrayy(char* data){
        strcpy(arrayy[arrayysize-1],data);
        arrayy = (char**)realloc(arrayy,arrayysize+1);
        arrayysize += 1;

   }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2014-09-02
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多