动态分配的类数组

时间:2011-09-12 17:39:57

标签: c++

我宣布了

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中的各个注释,但编译器不会编译它。我不确定这里出了什么问题,任何帮助都会非常感激。

2 个答案:

答案 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;