草庐IT

c++ - 释放动态分配的内存

在C++中,当你像这样在堆上创建一个新变量时:int*a=newint;你可以告诉C++使用delete来回收内存,如下所示:deletea;但是,当您的程序关闭时,它会自动释放使用new分配的内存吗? 最佳答案 是的,它是自动回收的,但是如果你打算编写一个大量使用堆的巨大程序,而不是在任何地方调用delete,你肯定会很快耗尽堆内存,这将使您的程序崩溃。因此,必须仔细管理您的内存,并为每个new(或delete[]如果使用new[]),只要您不再需要所述变量。 关于c++-释放动态分配

c++ - 从与分配时不同类型的指针释放内存是否安全?

我有一个关于在C++中释放内存的问题:typedefstructtype1{inta;intb;floatc;}Type1;typedefstructtype2{inta;intb;}Type2;void*p=newType1;delete(Type2*)p;在这种情况下,p所指向的内存区域是否会在p被强制转换为不同大小的类型后被完全删除? 最佳答案 行为未定义。在这种情况下,动态分配的对象只能通过Type1类型的指针删除。首先,在delete表达式中使用(Type2*)p得到的指针,违反了别名规则。p指向的对象可以通过一组有限的类

c++ - 从与分配时不同类型的指针释放内存是否安全?

我有一个关于在C++中释放内存的问题:typedefstructtype1{inta;intb;floatc;}Type1;typedefstructtype2{inta;intb;}Type2;void*p=newType1;delete(Type2*)p;在这种情况下,p所指向的内存区域是否会在p被强制转换为不同大小的类型后被完全删除? 最佳答案 行为未定义。在这种情况下,动态分配的对象只能通过Type1类型的指针删除。首先,在delete表达式中使用(Type2*)p得到的指针,违反了别名规则。p指向的对象可以通过一组有限的类

C++ 释放结构使用的所有内存

快速提问;我已经用谷歌搜索并找到了一些答案,但我有点偏执,所以我想确定一下。考虑这种情况:structCoordLocation{floatX;floatY;floatZ;};intmain(){CoordLocation*coord=newCoordLocation();deletecoord;return0;}调用delete是否也会清除字段X、Y、Z使用的内存?我发现的一些答案提到我只是删除POINTER,而不是这种方式实际引用的对象。万一……structCoordLocation{float*X;float*Y;float*Z;};intmain(){CoordLocation

C++ 释放结构使用的所有内存

快速提问;我已经用谷歌搜索并找到了一些答案,但我有点偏执,所以我想确定一下。考虑这种情况:structCoordLocation{floatX;floatY;floatZ;};intmain(){CoordLocation*coord=newCoordLocation();deletecoord;return0;}调用delete是否也会清除字段X、Y、Z使用的内存?我发现的一些答案提到我只是删除POINTER,而不是这种方式实际引用的对象。万一……structCoordLocation{float*X;float*Y;float*Z;};intmain(){CoordLocation

c - 用 C 调整数组大小

我需要在我正在制作的游戏中拥有一个结构数组-但我不想将数组限制为固定大小。有人告诉我有一种方法可以在需要时使用realloc使数组更大,但找不到任何可行的示例。有人可以告诉我怎么做吗? 最佳答案 从创建数组开始:structName**sarray=(structName**)malloc(0*sizeof(structName*));始终单独跟踪尺寸:size_tsarray_len=0;增加或截断:sarray=(structName**)realloc(sarray,(sarray_len+offset)*sizeof(str

c - 用 C 调整数组大小

我需要在我正在制作的游戏中拥有一个结构数组-但我不想将数组限制为固定大小。有人告诉我有一种方法可以在需要时使用realloc使数组更大,但找不到任何可行的示例。有人可以告诉我怎么做吗? 最佳答案 从创建数组开始:structName**sarray=(structName**)malloc(0*sizeof(structName*));始终单独跟踪尺寸:size_tsarray_len=0;增加或截断:sarray=(structName**)realloc(sarray,(sarray_len+offset)*sizeof(str

c - 确定 C 中动态分配内存的大小

C中有没有办法找出动态分配内存的大小?例如,之后char*p=malloc(100);有没有办法找出与p相关的内存大小? 最佳答案 没有找到此信息的标准方法。但是,一些实现提供了像msize这样的函数来执行此操作。例如:_msize在Windows上malloc_size在MacOS上malloc_usable_size在带有glibc的系统上但请记住,malloc将分配请求的最小大小,因此您应该检查您的实现的msize变体是否实际返回对象的大小或实际在堆上分配的内存。 关于c-确定C中

c - 确定 C 中动态分配内存的大小

C中有没有办法找出动态分配内存的大小?例如,之后char*p=malloc(100);有没有办法找出与p相关的内存大小? 最佳答案 没有找到此信息的标准方法。但是,一些实现提供了像msize这样的函数来执行此操作。例如:_msize在Windows上malloc_size在MacOS上malloc_usable_size在带有glibc的系统上但请记住,malloc将分配请求的最小大小,因此您应该检查您的实现的msize变体是否实际返回对象的大小或实际在堆上分配的内存。 关于c-确定C中

c++ - Visual C++ Express 2008 的静态运行时库链接

如何告诉VisualC++Express2008静态链接运行时库而不是动态链接?我的exes目前不能在没有安装某种VS的计算机上运行,​​我很想改变它。:) 最佳答案 抱歉,我没有要测试的VC++Express,但在标准版中,我使用项目属性->配置属性->C/C++->代码生成->运行时库。Dll和DllDebug用于动态链接。 关于c++-VisualC++Express2008的静态运行时库链接,我们在StackOverflow上找到一个类似的问题: ht