问题描述
- 结构体用动态分配内存,突破数量限制怎么搞,求大神解惑
- 那位大神可以发个类似的简单的程序,说明下原理,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并且数组原来的数据还存在
但是上面这些方法还是不灵活,推荐楼主使用vectorlist这些顺序容器来实现
#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(*ppDatasizeof(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(&pDatanum);return 0;
}
时间: 2024-10-28 13:55:48