在c++中删除动态数组
Deleting a Dynamic Array in C++
char * names( char * fname = new char[ 15 ], char * lname new char[ 25 ] )
{
lname[ strlen( lname ) ] = ','; //adds a comma
lname[ strlen( lname ) ] = ' '; //adds a space(lastname, firstname)
strcat( lname, fname ); //concatenate fname to lname
delete[ ] fname; //delete array
return lname; //return lname
delete[ ] lname; //delete array
}
我在c++中没有太多的动态数组经验,但我在我做的一个函数中使用了一个。我的理解是,你可以在使用完数组后释放内存。但是,如果我在使用return语句之前删除它,程序就会崩溃:
如果我运行它,它会崩溃,但是如果我将delete[] fname语句移动到return语句之后,它就会正常工作。为什么当我在返回语句之前删除[]fname时它会崩溃?我将fname连接到lname并返回lname。如果我在返回之前删除fname数组,应该没关系,应该吗?或者你能不这样释放记忆吗?
这不是一个很好的c++代码。首先,你所做的不是很优雅
char * names( char * fname = new char[ 15 ], char * lname new char[ 25 ] )
一个函数不应该用它的形参创建什么东西,它应该是一个对象的副本、指针或引用。
第二件事,如果你把delete放在return之后,它不会崩溃,这很正常,因为它永远不会删除。返回将结束函数,其他部分代码将不执行。
第三,你应该在c++中使用字符串。字符串自己管理内存,你不需要做那些可怕的事情。
一个更好的方法可以是。
std::string names(std::string fname, std::string lname)
{
std::string fullname = lname + " ," + fname;
return fullname;
}
你可以这样使用
names("MyName", "MyLastName");
//Result
"MyName, MyLastName"
C方式(你应该考虑你的缓冲区是足够的,所以给足够的缓冲区大小)
void name(char* infname, char* inlname, char* outfullname)
{
char* a = ", "
strcat(outfullname, inlname);
strcat(outfullname, a);
strcat(outfullname, infname);
}
你可以用
char fname[200];
char lname[200];
char fullname[500];
strcpy(fname, "MyName");
strcpy(lname, "Mylname");
name(fname, lname, fullname);
//fullname will be
"Mylname, MyName"
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错