那位大神可以发个类似的简单的程序,说明下原理,c++学的不怎么样,要求使用malloc和free动态申请内存。之前是定义个50的数组,怎么弄成根据需求增加的
你查一下 malloc 的用法,就知道如何改了。
简单的代码:
结构体指针 = malloc(sizeof(结构体) * 50);
...
free(结构体指针);
判断要开辟的空间是否大于50,如果大于了,先记录下原来内存中的内存,然后释放掉,再开辟一个更大的内存空间,先吧之前记录的50个数据放进去
可以用链表的方式需要一个就new一个,不要了就delete()。
你之前使用的是数组,定义的长度为50个,现在不知道有多少个的话,可以使用动态一维数组
在C++里面最好不要使用malloc和free,对于内置类型(int , char , double...)的话可以一试,但是对于类类型的话一定要用new的delete。
假如现在你动态申请了一个长度为五十的数组
const int & arraySize = 50;
int * array = (int *)malloc(sizeof(int)*arraySize);
如果现在你要把六十个数据存入到这个数组里面,你可以这样拓展数组大小
const int & newArraySize=60;
array = realloc(array ,newArraySize );
现在你的数组大小就扩展成了60,并且数组原来的数据还存在
但是上面这些方法还是不灵活,推荐楼主使用vector,list这些顺序容器来实现
#include <vector>
using namespace std;
/** some code */
vector<int> vec;
vec.push_back(10);
想怎么变就怎么变
#include
#include
typedef struct Data
{
}MyData, *pMyData;
int AllocMem(pMyData *ppData, int num)
{
int ret = 0;
if (*ppData != NULL)//这里,需要为结构体数组扩展内存,故需要把原先的的数组数据复制到新分配的内存空间,函数realloc可实现这个功能
{
pMyData ptmp = (pMyData)realloc(*ppData,sizeof(MyData)* num);
if (ptmp == NULL)
{
ret = 1;
return ret;
}
}
else
{
pMyData ptmp = (pMyData)malloc(sizeof(MyData)* num);
if (ptmp == NULL)
{
ret = 1;
return ret;
}
}
return ret;
}
int main()
{
int num;
MyData *pData = NULL;
printf("input how many do your want to create:\n");
scanf("%d", &num);
AllocMem(&pData,num);
return 0;
}