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;
}