如何释放字符串数组

时间:2015-03-18 16:24:15

标签: c++ arrays string free

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

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的指针数组......我真的需要它用于我的程序而且我真的搜索了很多,我找不到解决这个简单问题的方法。

2 个答案:

答案 0 :(得分:1)

声明

cardsName[0] = "a";

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

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

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

第二个问题是,

delete []cardsName; 

也错了。您从未使用new[]分配此数组,因此语句失败。

答案 1 :(得分:0)

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

另外,使用裸指针和char数组时,您应该使用std::stringstd::vector / std::array