我只是没有进一步为C中的数组分配内存,主要是C++.我找了一些例子,但对我来说没有任何有用的,至少看起来如此.
所以,如果我在这里有一个typedef:
typedef struct
{
int x;
int y;
} Coordinate;
Coordinate* myList;
Run Code Online (Sandbox Code Playgroud)
我也有一个类型的数组Coordinate,如何动态地附加项目.我所知道的是,我必须使用malloc,后来free在C和new/ deleteC++中.(Malloc吓坏了我)
所以我的目标是这样的功能:
void AddSomething ( int x, int y )
{
// myList malloc/new magic here
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如何为myList分配新内存然后将新项添加到其中的行必须如何? 你能告诉我一个C和C++ 的工作示例吗?
C中的malloc究竟是如何工作的?有一些我不熟悉的事情(在函数之前有一些指针,并且分配的变量设置为mallocs返回值)
Tot*_*nga 14
使用vector来完成这项工作.
#include <vector>
typedef struct
{
int x;
int y;
} Coordinate;
std::vector<Coordinate> coordinates;
Coordinate newCoord;
newCoord.x = 1;
newCoord.y = 1;
coordinates.push_back(newCoord);
Run Code Online (Sandbox Code Playgroud)
附加信息: 要了解malloc/free和new/delete,您可以阅读章节
13:动态对象创建
在Bruce Eckels Thinking C++第1卷.它是一本可以免费下载的书.
对于C,以下将创建包含单个Coordinate的列表:
myList = malloc(sizeof(Coordinate));
Run Code Online (Sandbox Code Playgroud)
如果要分配大小为n的数组,请执行以下操作:
myList = malloc(n * sizeof(Coordinate));
Run Code Online (Sandbox Code Playgroud)
在C++中,大小为n的数组的代码如下所示:
myList = new Coordinate[n];
Run Code Online (Sandbox Code Playgroud)
对于C++情况,您的类必须具有默认构造函数,Coordinate该类具有隐式构造函数.但是对于C++,我强烈建议使用std::vector<Coordinate>而不是手动管理的数组.
另外,您也可以使用malloc()C++分配内存,但它只分配原始内存,而使用new也会触发对构造函数的调用.在你的结构的情况下,没有区别,因为它是一个POD结构,不需要构造函数.另外,请记住,如果使用C++分配内存malloc(),则必须使用free()它来释放它; 如果您正在使用new,则需要使用delete- 将两者混合可能会产生非常有趣的结果,这些结果不是很有趣的调试.有了new,您还必须确保匹配正确的调用类型.任何使用new需要清理的delete东西都需要清除,并且使用上面的例子中使用new new创建的任何内容都需要删除delete[].