如何释放字符串数组
How to free array of strings
我在释放字符串数组时遇到问题。
我有一个程序,但我编写了这个简单的代码来查看错误:
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::string
和 std::vector
/std::array
.
而不是使用裸指针和 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]);
这给我错误 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::string
和 std::vector
/std::array
.
char
数组