C++ 删除字符**
C++ Delete char**
我知道有很多关于这个问题的问题,但我已经尝试了一切,似乎没有任何效果。
我有char**
,当我尝试删除它时,我被抛出异常。当我不删除它时,函数返回后会引发异常。
我有一个类似于这样的函数:
void function(){
int argc = 5; char** argv;
argv[0] = "...";
argv[1] = "...";
//...
Package package;
package.ProcessCommandLineArgs(argc, argv); // this does NOT delete argv
// THIS FAILS
for(int i=0;i<5;i++)
delete[] argv[i]; // <--- EXCEPTION HERE
delete[] argv;
}
我什至尝试仅将该功能用于以下功能:
void function(){
int argc = 5; char** argv;
argv[0] = "...";
argv[1] = "...";
//...
// just declare argv and delete it also fails
for(int i=0;i<5;i++)
delete[] argv[i]; // <--- EXCEPTION HERE
delete[] argv;
}
我不能不使用char**
因为我有 4 个类在调用链中使用相同的参数,所以我没有使用vector<string>
的选项。
我将不胜感激任何帮助。 如果你想投反对票,那就去做吧,但请给我一个答案,因为我已经磕磕绊绊了几个小时了。
谢谢。
编辑:我明白为什么这被否决了,现在如果我看到它在SO上被问到,我会投反对票。从那以后,我更改了所有程序以将参数转换为std::vector<std::string>
。如果我试图删除这个问题,我将面临失去提问能力的风险,因为这已经有了答案。
可能有效的代码版本如下所示:
#define MAX_SIZE 256 // TODO: set to the size you need...
void function(){
int argc = 5;
char** argv = new char*[argc]; // allocate space for the array!
for(int i = 0; i < argc; ++i) {
argv[i] = new char[MAX_SIZE]; // allocate space for the array entry!
}
// TODO: bounds checking!!!
strcpy(argv[0], "..."); // set the string to the "..."
strcpy(argv[1], "..."); // same...
// cleanup
for(int i=0;i<argc;i++)
delete[] argv[i];
delete[] argv;
}
总之,只delete[]
你new[]
的,只delete
你new
的,只free
你malloc/calloc/realloc
的。
话虽如此,如果你可以控制ProcessCommandLineArgs
的实现 ,只通过一个std::vector<std::string>
而不用担心内存管理会好得多。
这并不奇怪; 你不能delete[]
你没有new[]
的东西!
事实上,你的整个程序都有未定义的行为,因为你的char**
是未初始化的,不会指向任何地方。
这些元素(如果有效)指向字符串文本,而字符串文本同样不能delete[]
d。
相关文章:
- 在C++的字符串中搜索和删除某些字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 如何在 c++ 中删除字符串中的某些字符?
- 从双引号括起来的子字符串中删除特定字符
- 如何从字符数组(不是字符串数组)中删除符号
- C++ 从 std::string 中删除所有非数字字符
- xcode 从源代码中删除奇怪的控制字符
- C++从句子中删除给定字符的程序不起作用
- 正在从C++中的字符数组中删除字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- C++从字符末尾删除值
- 从字符数组中删除双空格
- 循环以从字符数组中删除过多的空格 (C++)
- 如何删除新分配的字符,这也是函数返回值?
- 删除字符串向量中的字符重复
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除以前打印的字符
- 回文查找器:非字母数字字符删除问题