gpt4 book ai didi

c++ - 从数组中删除指针

转载 作者:行者123 更新时间:2023-11-30 02:04:34 24 4
gpt4 key购买 nike

我是 C++ 的新手,我遇到的这个问题让我困惑了大约 2 个小时。我想要做的是创建一个指向我的类 Word 对象的指针数组,一个二维数组,即 **wordPtrList。然后我需要删除数组中某些对象的内存并将它们的指针设置为空。我在下面写了一个我想要完成的较小版本。

int main()
{
char *cArray;
cArray = new char[4];
int i;

for (i = 0; i < 3; i++)
cArray[i] = 'a';

cArray[i + 1] = '\0'; //cArray is a null terminated string

Word **wordPtrList;
wordPtrList = new Word* [3];

for (i = 0; i < 3; i++)
{
wordPtrList[i] = new Word(cArray);
}

wordPtrList[1]->del();
delete wordPtrList[1];
wordPtrList[1] = '\0';

return 0;
}

class Word
{
private:
char* ptr_;
int len_;
public:
Word(const char* word)
{
len_ = strlen(word);
ptr_ = new char[len_];
strcpy(ptr_, word);
}
~Word()
{
delete [] ptr_;
ptr_ = 0;
}


void del()
{
delete [] ptr_;
ptr_ = 0;
return;
}

};

然而,当我这样做时,我得到:

Debug Error Heap Corruption Detected after normal block

这是在 Windows 7 上的 VS 2010 中。

所以我想问的是,如何删除我的对象的内存,以便我可以将 wordPtrList[1] 设置为 Null?

最佳答案

您正在为 cArray 分配 4 个字节(意味着您有权写入字节 0 到 3),然后写入 cArray[4]。您在 Word 构造函数中分配的字节也太小了。

char *cArray;
cArray = new char[4];
int i;

for (i = 0; i < 3; i++)
cArray[i] = 'a';
cArray[i] = '\0'; //cArray is a null terminated string - i is now 3

 Word(const char* word)
{
len_ = strlen(word);
ptr_ = new char[len_ + 1];
strcpy(ptr_, word);
}

应该可以解决问题。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com