C++ 如何释放字符串数组

C++ 如何释放字符串数组,c++,arrays,string,free,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]); free():无效指针:0xbfc38dd8*** 然后我如何释放指向char的指针

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

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]);
free():无效指针:0xbfc38dd8***

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

声明

cardsName[0] = "a";
将指针指定给无法删除的字符串literal
“a”
。分配给
cardsName[0]的指针=新字符[3]被丢弃,您将遭受内存泄漏

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

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

第二个问题是

delete []cardsName; 

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

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


此外,使用裸指针和 char 数组,应该使用<代码> STD::String 和 STD::vector >代码> STD::数组 .< /P>你的C++代码看起来很像C代码。您是否考虑过使用标准库类,例如“代码> STD::数组< /COD>和<代码> STD::String ?我在C++中有一个作业(我刚开始课程),不允许使用STL类等。这只是代码的一部分,没有包含C++的许多课程不允许C++的最佳部分……在这个部分不允许使用字符串(XD),第一个星期的课程被编程来处理指针数组等。@ SAIF……课程的第一个星期被编程,用指针数组来工作……这应该在课程高级部分完成,而不是初学者。唉!是的,我是一名护士probably@Saif在我的回答中扩展。我不明白为什么cardsName[0]=“a”;不能删除,但使用strcpy它可以工作,但你能解释为什么吗?thanks@Saif

“a”
本身是一个
char*
指针,指向具有静态存储持续时间(字符串文字)的对象,因此无法删除它。
strcpy()
将字符串文本中的字符值复制到以前使用
new char[3]创建的指针@πάνταῥεῖ  好的,我知道了,但是如果我有int*arr[];什么是soultion?因为我没有strcpy或函数来复制字符指针的yes数组,string会更正确,但在这种情况下是不允许的question@Fireho引用OP的评论:“在hw中,不允许使用STL类等…”@πάνταῥεῖ 这是对未来的建议。无论如何,我对这个案子给出了一个正确的答案。@Fireho什么是正确的答案?为什么删除失败,或者只是对调用
char*
字符串的吹毛求疵?
delete []cardsName;