类的动态分配数组
Dynamically Allocated Array of a Class
我已经声明
private:
Comment *commentArray;
int arrSize;
在使用它的类的头中,称为CommentManager。这些在构造器中初始化,如下所示:
arrSize = 1;
commentArray = new Comment[arrSize];
如果我正确理解这一点,这应该创建一个由一个Comment组成的"数组"。然后我设置了这个类的核心功能:
void CommentManager::addComment(QString commText, int start, int end)
{
Comment *saveArray;
saveArray = new Comment[arrSize + 1];
for (int i = 0; i < arrSize; i++)
saveArray[i] = commentArray[i];
delete[] commentArray;
commentArray = saveArray;
arrSize += 1;
这应该会将commentArray的大小放大一。然后我想添加注释数据,这是通过comment:中声明的函数完成的
标题:
private:
QString comment;
int startPosition;
int endPosition;
功能:
void Comment::setComment(QString comm,int newStartPos, int newEndPos)
{
comment = comm;
startPosition = newStartPos;
endPosition = newEndPos;
}
我调用这个函数如下:
commentArray[arrSize].setComment(commText,start,end);
这会导致segfault:根据调试器,"comment"不存在。因此,我试图初始化commentArray中的各个注释,但编译器无法编译。我不确定这里出了什么问题,如果有任何帮助,我们将不胜感激。
commentArray[arrSize].setComment(commText,start,end);
arrsize太大了一步。
大小为10的数组的索引从0到9,使用10将越界。
commentArray[arrSize].setComment(commText,start,end);
总是引用一个不存在的元素,因为您指向的是超过数组中元素数量的一个。声明应为
commentArray[arrSize-1].setComment(commText,start,end);
此外,您可能应该使用容器类,而不是手动管理对象数组。如果您可以使用boost,请查看boost::ptr_vector
。如果没有,请考虑使用以下方法之一:
std::vector<std::unique_ptr<Comment> > commentArray;
或
std::vector<std::shared_ptr<Comment> > commentArray;
相关文章:
- 字符指针数组内存分配
- 当按下 SFML C++时,如何在数组中分配值
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 将数组动态分配到具有指针参数的函数中
- C++ 无法将字符数组变量分配给字符串变量
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 动态数组仅分配一个元素
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- 动态数组内存分配如何工作
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 简单的数组内存分配与大小动态分配和预定的大小
- 分配对象数组动态冻结