删除字符串指针在struct中的内存
Deleting String Pointers Memory in Struct
带有struct声明:
struct Dat {
int count; // number of files
string *files;
Dat(): count(0), files(nullptr) {}
~Dat() {
delete[] files;
}
}
然后我构建了这样的文件:
buildFiles(int argc, char *argv, Dat my) {
my.files = new string[my.count]; // my.files = new string[3]
int filedex = 0;
for (int i=0; i<argc; ++i) {
if (some condition for argv[i]) { // only looking for filenames from argv
my.files[filedex] = argv[i]; // store filename in my structure
filedex++;
}
}
if (filedex != my.count) cerr << "BAD";
}
int main (int argc, char *argv[])
{
Dat my;
// functions that define my.count to be non-zero, e.g. my.count = 3
buildsFiles(argc, argv, my);
// blahblah
return 0;
}
现在如何删除动态分配的变量,文件?我尝试过delete[] my.files
和delete[] my->files
,但似乎都没有用。我是C 的新手,因此对任何帮助都将不胜感激。
dat my;叶子范围称为击层,它删除了一系列的char指针。您无需对存储的字符串做任何事情,因为它们只是指向ARGV数组的内容的指针,该串件由C
处理现在您有错误。我的计数开始为零,因此分配了零空间。然后,即使没有分配空间,您也将写入记忆。这很危险 - 它在堆栈上,因此您可以覆盖堆栈的重要值。
您需要预先分配一些空间,并检查是否尝试在数组中存储太多东西。现在,您正在用记忆写作俄罗斯轮盘赌。
如果您想飞行调整结构大小,则需要使用std :: vector或某种链接列表。
如果您坚持手动分配,则需要预先分配足够的空间(设定的金额或计算要存储的物品数量(,并放入检查以检测您是否试图访问外面的某些东西分配的内存。
有一个查看此代码,该代码将检测内存泄漏:
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
struct A
{
int* num;
};
int main()
{
A a;
a.num = new int[10];
delete[] a.num;
_CrtDumpMemoryLeaks();
}
此摘录没有内存泄漏。因为每个new[]
都称为delete[]
。
但是,如果您要发表评论delete[] a.num;
,那么它将检测到泄漏:
Detected memory leaks!
Dumping objects ->main.cpp(14) : {66} normal block at 0x0000024280E47630, 40 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
因此,对于每个new
,您都需要一个delete
,对于每个new[]
,您都需要一个delete[]
。
您在buildfiles(int argc,char *argv [],dat&amp; my(中使用过的折叠,否则它将从主函数中复制我的对象,但没有dat中的复制构造函数,因此不安全,驱动器将被称为两次。PS:如果指针为null,则应该删除并设置ad ad nullptr。
- 将字符串存储在c++中的稳定内存中
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 删除字符串指针在struct中的内存
- Struct占用了太多内存
- C 在结构数组中为每个元素(struct)分配堆内存
- std::int 和 struct 内存不足的映射 (std::Bad_alloc) c++
- 内存修补的const struct声明
- 在struct和main中分配内存的区别
- 为结构成员分配的内存是连续的吗?如果struct成员是数组呢?
- malloc、struct、std::string和free可能导致内存泄漏
- 内存分配问题传递/返回Struct *数组
- Struct c++中的内存泄漏