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

问题描述

结构体用动态分配内存,突破数量限制怎么搞,求大神解惑
那位大神可以发个类似的简单的程序,说明下原理,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

c++-结构体用动态分配内存,突破数量限制怎么搞,求大神解惑的相关文章

数据库-sap hana创建存储过程之后调用出问题了 说我数据数量或类型参数不对 求大神解答

问题描述 sap hana创建存储过程之后调用出问题了 说我数据数量或类型参数不对 求大神解答 wrong number or types of parameters in call: OUT_ROUTE is not bound: line 1 col 6 (at pos 5)! 不知道这个错误该怎么解决 解决方案 已解决 正确方式如下 CALL "TRAFFIC"."SINGELROUTE" ('安美居','张家口',?) 解决方案二: SAP HANA.BO交

c#读取txt文档到一个结构体上,并在datagridview显示,求大神啊。

问题描述 c#读取txt文档到一个结构体上,并在datagridview显示,求大神啊. c#读取txt文档到一个结构体上,并在datagridview显示,求大神啊. 解决方案 要看是什么结构体了,简单的定长的无指针的结构体可以直接使用二进制数据来作为结构体对象,只需要引用数据的指针通过 static_car /reinterpret_cast 转型 参考<C++类型转换>http://blog.csdn.net/winsenjiansbomber/article/details/50670

c语言-关于C语言结构体指针类型的强制转换(求大神详细解答)

问题描述 关于C语言结构体指针类型的强制转换(求大神详细解答) #include <iostream> #include <algorithm> using namespace std; typedef struct { string dna; int count; }DNA; DNA dna[101]; **int cmp(const void *a,const void *b) { DNA *aa = (DNA *)a; DNA *bb = (DNA *)b; return a

调试-求大神~~ c free()结构体指针出错

问题描述 求大神~~ c free()结构体指针出错 本人菜鸟一枚,调试程序时发现下面的程序只要用free()来释放结构体指针就出错,百思不得其解,望大师指正!非常感谢啦! 注:本人用的是VC6.0.自己写的C程序,私心揣测难道是结构体指针特殊一点,或者我释放的方式不对~ 补充:C-Free 5.0上选择mingw5调试则没有问题!到底哪里有问题? #include <stdio.h> #include <stdlib.h> #include <malloc.h> st

java数组的内存分配问题,求大神解答

问题描述 请问我定义一个长度为1000的int型数组,debug时发现数组的值是100个一组显示的,如图请问为什么?求大神解答 解决方案 解决方案二:这个没具体研究过,我的理解是:方便管理,就好像100以内的数组是单个存储的,10000的数组是200存储的解决方案三:引用1楼shijing266的回复: 这个没具体研究过,我的理解是:方便管理,就好像100以内的数组是单个存储的,10000的数组是200存储的 我觉得会不会是跟JVM中的内存最小单位有关,就像一般做索引时,R树的叶子节点大小就需要

struct-数组和结构体对齐关系,求大神解决!

问题描述 数组和结构体对齐关系,求大神解决! #include typedef struct { unsigned char a; unsigned char b; unsigned int c; unsigned short d; unsigned int e; } ABC; const unsigned short code1[6] = {0x1607,0x1003,0x1008,0x2001,0x3002,0x4003}; void main(void) { ABC * p = (ABC

web css js-java web树形菜单(树形结构),求大神现身

问题描述 java web树形菜单(树形结构),求大神现身 一直做得都是Java后端开发,最近经理给我分了个任务,其中一段是web树形菜单的处理.用jquery实现树形菜单(标签是ul和li)之后,发现ul和li无法导入到excel.在此特请java大神,帮忙用table,tr,td(可配合span',div)实现树形菜单.努力研究了两天,我已经跪了,效果见图片 ?若能实现,如救我一命,胜造七级浮屠..... 解决方案 试试jstree或者ztree吧.成熟的插件可以满足你的功能需求,节约开发时

关于java问题-Java循环结构初学者求大神带

问题描述 Java循环结构初学者求大神带 从键盘接收一批整数,比较其中最大值和最小值,输入数字0时循环结束. 解决方案 import java.util.Scanner;public class Test0305 { public static void main(String[] args) { Scanner s=new Scanner(System.in); int min=Integer.MAX_VALUE; int max=Integer.MIN_VALUE; int value=s.

eclipse使用fresco框架加载图片,内存没有释放.求大神指导

问题描述 eclipse使用fresco框架加载图片,内存没有释放.求大神指导 02-01 17:11:36.785: W/unknown:CloseableReference(17517): Finalized without closing: 429970e8 42997048 (type = CloseableStaticBitmap) 02-01 17:11:36.785: W/unknown:CloseableReference(17517): Finalized without cl