结构体用动态分配内存,突破数量限制怎么搞,求大神解惑

那位大神可以发个类似的简单的程序,说明下原理,c++学的不怎么样,要求使用malloc和free动态申请内存。之前是定义个50的数组,怎么弄成根据需求增加的

6个回答

你查一下 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;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问