我宣布了
private:
Comment *commentArray;
int arrSize;
在使用它的类的标题中,称为CommentManager。这些在构造函数中初始化,如下所示:
arrSize = 1;
commentArray = new Comment[arrSize];
如果我理解正确,这应该创建一个评论的“数组”。然后我设置了这个类的核心功能:
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);
这会导致段错误:根据调试器“注释”不存在。因此,我尝试初始化commentArray中的各个注释,但编译器不会编译它。我不确定这里出了什么问题,任何帮助都会非常感激。
答案 0 :(得分:4)
commentArray[arrSize].setComment(commText,start,end);
arrsize太过分了。
大小为10的数组从0到9被索引,使用10将超出约束。
答案 1 :(得分:3)
commentArray[arrSize].setComment(commText,start,end);
总是会引用一个不存在的元素,因为你指的是一个超过数组中元素数量的元素。声明应该是
commentArray[arrSize-1].setComment(commText,start,end);
此外,您应该使用容器类,而不是手动管理对象数组。如果您可以使用提升,请查看boost::ptr_vector
。如果没有,请考虑使用以下之一:
std::vector<std::unique_ptr<Comment> > commentArray;
或
std::vector<std::shared_ptr<Comment> > commentArray;