C++内存分配函数
#define MAXINT 100;
typedef struct Node{
ElemType Data;
int Weigth;
} TestNode;
TestNode* testNode = (TestNode*)malloc(MAXINT, sizeof(TestNode));//需要判断分配是否成功,testNode==null则分配失败,下同
testNode = (TestNode*)realloc(MAXINT * 2, sizeof(TestNode));
大家可以看到,目前C语言主要有两种内存分配方式,一种是直接分配,一种是叠加分配
分配方式 | 分配函数 | 分配原理及注意事项 |
---|---|---|
直接分配 | malloc() | 动态内存分配中的首次适应算法或者邻近适应算法 |
叠加分配 | realloc() | 动态内存分配: 1。当前分配的内存+邻近区域的内存足够,直接分配,2. 如果当前分配的内存+邻近区域的内存不够,重新分配 |
struct flowRecord
{
string app_name;
struct flowRecord *next;
};
int main() {
flowRecord *fr = (flowRecord*)malloc(sizeof(flowRecord));
fr->app_name = "hello";
cout << fr->app_name << endl;
return 0;
}
注意事项:
new和malloc都是在堆上分配空间。new在分配内存时会调用默认的构造函数,而malloc不会调用.而结构体flowRecord中有string对象,所以使用malloc不会调用默认构造函数,这会导致不会分配空间给app_name.因而在调用fr->app_name会造成段错误。