如何释放字符串数组



我在释放字符串数组时遇到问题。我有一个程序,但我做了这个简单的代码来查看错误:

char *cardsName[2];
cardsName[0] = new char[3];
cardsName[0] = "a";
cardsName[1] = new char[3];
cardsName[1] = "c";
for(int i=0;i<2;i++)
    delete(cardsName[i]);

这给了我错误munmap_chunk(): invalid pointer: 0x080489b8 ***

这也给了我一个错误:

char *cardsName[2];
cardsName[0] = new char[3];
cardsName[0] = "a";
cardsName[1] = new char[3];
cardsName[1] = "c";
delete []cardsName;

free():无效指针:0xbfc38dd8***

然后我如何为指向char的指针数组释放,。。。我的程序真的需要它,我真的搜索了很多,但我找不到这个简单问题的解决方案。

语句

cardsName[0] = "a";

为无法删除的字符串文本"a"分配一个指针。使用cardsName[0] = new char[3];分配的指针将被丢弃,您将遭受内存泄漏。

您可能打算使用strncpy()来分配值:

strncpy("a",cardsname[0],3);

第二个问题是,

delete []cardsName; 

也是错误的。您从未为该数组分配new[],因此该语句失败。

这不是一个字符串数组,因为您只使用char* cardsName,它是一个字符串(字符数组)。如果您想创建一个字符串数组,您需要使用字符数组数组char** cardsName

此外,应该使用std::stringstd::vector/std::array,而不是使用裸指针和char数组。

最新更新