Ⅰ c++中给结构体分配动态内存的问题……用new吗 怎么用
C++中是没有结构体的,从C继承来的struct已经变成类了,而不再只是一个结构体,直接new就可以了。
#include<iostream>
struct myclass
{
int a;
myclass(int arg);
myclass();
void show();
};
myclass::myclass(int arg)
{
this->a = arg;
}
myclass::myclass()
{
this->a = 0;
}
void myclass::show()
{
std::cout<<this->a<<std::endl;
}
int main()
{
myclass* obj = new myclass();
obj->show();
myclass *obj2 = new myclass(100);
obj2->show();
delete obj;
delete obj2;
}
Ⅱ 结构体想使用动态分布内存,但是又不使用链表,这个该怎么实现
不分配内存,就不能存储数据。如果是用数组方式存储,则是顺序表。链式,不需要每个元素的地址连续。这里存在两个概念,物理结构和逻辑结构。顺序表就是物理结构。链式就是逻辑结构
Ⅲ 关于链表的存储空间,或者说是它到底是怎么如何实现"动态存储"的
所谓空间实际是对应的物理内存。
其实很简答,所谓动态分配就是程序运行时候调用内存分配函数为你链表的节点分配存储信息的内存而已,这个应该很好理解吧?分配内存的大小就是你所需要的大小嘛,比如你节点的结构体大小。
至于内存分配的具体实现,简单来说就是系统内部会维护一个内存分配链表,当你调用内存分配函数的时候,系统为你申请你需要的内存,并把插入一个节点到这个内存管理链表中。
这样一来当你释放内存的时候,系统就会去找个表,然后它就根据这个节点上记录的信息去释放这个内存。
程序这个很多的,网上例子也很多可以上网查找下。自己学会利用搜索引擎才是学习的好方法。不能一味靠问哦
Ⅳ C语言动态分配内存给结构体数组
1、可以在结构体中添加指针类成员变量,并在成员函数中实现动态数组的分配。
2、以下以一个仅实现整型动态数组,不包含其它功能的类为例做说明。
classarray//类名
{
public:
int*v;//动态数组首地址。
intlength;//动态数组长度。
array(intlen)
{
if(len<=0)//初始化长度非法。
{
length=0;
v=NULL;
}
else
{
length=len;
v=newint[length];//内存分配。
}
}
~array()
{
delete[]v;//析构中释放内存。
}
};
Ⅳ c++中给结构体分配动态内存的问题……用new吗 怎么用
c++中给结构体分配动态内存是用new。
示例:
struct mystruct
{
int a;
char b;
}
mystruct *pMySrt=new mystruct;
pMySrt->a=1;
pMySrt->b='a';
cout<<pMySrt->a<<" "<<pMySrt->b<<endl;
delete pMySrt;
(5)如何为结构体开辟动态存储空间扩展阅读
c++中new的用法
1、调用operator new分配内存,operator new (sizeof(A)) ;
2、调用构造函数生成类对象,A::A() ;
3、返回相应指针 ;
4、分配内存这一操作就是由operator new(size_t)来完成的,如果类A重载了operator new,那么将调用A::operator new(size_t ),否则调用全局::operator new(size_t ),后者由C++默认提供。
Ⅵ C语言,怎么为动态结构体数组分配内存
这行代码:array = (struct record *)malloc(sizeof(struct record )*num);
是要申请struct record类型的内存,而你定义成int*,所以int* array改成struct record* array,另外num和i的定义不要record定义在一起,否则类型和record一样,要独立定义为:int num,i,最后,scanf("%c", &array[i].coef);改成scanf("%f", &array[i].coef);
Ⅶ 如何用new来为结构体动态分配内存
struct mystruct
{
int a;
char b;
}
mystruct *pMySrt=new mystruct;
pMySrt->a=1;
pMySrt->b='a';
cout<<pMySrt->a<<" "<<pMySrt->b<<endl;
delete pMySrt;
Ⅷ C语言动态开辟内存问题
根据使用函数不同,作用各不相同。共同点均是动态分配一段内存,使用后需要用free函数释放。所有动态分配函数均声明在stdlib.h中。
1 malloc
void *malloc(unsigned int num_bytes);
功能
分配长度为num_bytes字节的内存块
返回值
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
说明
关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
2 calloc
void *calloc(size_t n, size_t size);
在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
3 realloc
void *realloc(void *mem_address, unsigned int newsize);
功能
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
返回值
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意
当内存不再使用时,应使用free()函数将内存块释放。