C++ C++;删除字符**
我知道这方面有很多问题,但我已经尝试了所有方法,但似乎没有任何效果 我有C++ C++;删除字符**,c++,char,delete-operator,args,C++,Char,Delete Operator,Args,我知道这方面有很多问题,但我已经尝试了所有方法,但似乎没有任何效果 我有char**,当我试图删除它时,会抛出异常。当我不删除它时,函数返回后会引发异常 我有一个类似的功能: void function(){ int argc = 5; char** argv; argv[0] = "..."; argv[1] = "..."; //... Package package; package.ProcessCommandLineArgs(
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函数(){
int argc=5;字符**argv;
argv[0]=“…”;
argv[1]=“…”;
//...
包装;
package.ProcessCommandLineArgs(argc,argv);//这不会删除argv
//这失败了
对于(int i=0;i而言,可能有效的代码版本如下:
#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;
}
#定义最大尺寸256//TODO:设置为您需要的尺寸。。。
空函数(){
int argc=5;
char**argv=new char*[argc];//为数组分配空间!
对于(int i=0;i 对于(int i=0;i这并不奇怪;您不能删除[]
您没有的内容新[]
事实上,您的整个程序都有未定义的行为,因为您的char**
未初始化,并且不指向任何地方
如果这些元素是有效的,那么它们指向字符串文本,而字符串文本又不能是delete[]
d.你从不为argv
分配内存……好吧,那你在哪里new argv
?这些函数对char**
有什么作用?很可能你仍然可以使用std::vector
。在我的代码中,我有argv=new char*
,但这还不够。@Evan的回答为我澄清了所有问题。先生,你有我的f完全尊重。你为我提供了与其他任何地方不同的完整示例。你澄清了所有需要做的事情。我只需将strcpy
更改为strcpy\u
,现在一切都正常了。我想使用vector
,但我需要更改大约10个文件才能正常工作,因为我有一组程序我最初设计从main获取输入参数。谢谢。我真的非常感谢你。我有一个截止日期,这真的让我很难过。有趣的是,我的程序的其余部分要复杂x1000倍,但我尽量避免内存管理。再次非常感谢。@各位,没问题。pointers和手动内存管理可能会变得粗糙,有时您只需要朝着正确的方向推动:-)
#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;
}