C++动态内存分配问题

【摘要】 动态内存分配问题
动态内存分配问题:c中供程序使用的储存空间,有程序区,静态储存区,动态储存区。
c++中,我们把内存进一步详细分为5个区域;
(1)栈:一般函数内的局部函数都会放在这里,由编译器自动分和释放。
(2)堆:程序员malloc/new分配,用free/delete来释放。忘记释放后,程序结束系统会自动回收
(3)全局/静态存储区:放全局变量和静态变量s…

动态内存分配问题

动态内存分配问题:c中供程序使用的储存空间,有程序区,静态储存区,动态储存区。

c++中,我们把内存进一步详细分为5个区域;

(1)栈:一般函数内的局部函数都会放在这里,由编译器自动分和释放。

(2)堆:程序员malloc/new分配,用free/delete来释放。忘记释放后,程序结束系统会自动回收

(3)全局/静态存储区:放全局变量和静态变量static。程序结束时系统释放

(4)常量存储区:”i love you”;

(5)程序代码区

堆和栈不同的用途和区别

(1)栈空间有限的,这是系统自动分配的, int a = 4,分配速度快,程序员也控制不了

(2)堆:只要不超出实际拥有的物理内存,也在操作系统允许你能够分配的最大内存大小之内,都可以分配给你,分配速度比栈慢,好处是灵活,随时用new/malloc分配,用free/delete释放。


//在C语言中,用malloc和free从堆中分配和释放内存

void *malloc(int NumBytes);//NumBytes:要分配的字节数

//分配成功返回分配的地址指针,分配失败返回NULL

//当这段分配的内存你不使用时,应该用free释放掉供其他地方使用

void free(void *FirstByte)//将之前用malloc分配的内存空间还给程序(操作系统),也就是说释放了这块内存,被系统回收,并在需要时由系统分配给其他地方
int * p = NULL;
p = (int *)malloc(sizeof(int));//把从堆中分配的四个字节强转为int *类型
if(p != NULL) {
//分配成功
*p = 5;
cout << *p <<endl;
free(p);//完成任务后释放
}

char * point = NULL;
point = (char*)malloc(100 * sizeof(char));
if(point != NULL)
{
//strcpy(point, "hello world");这种会有内存溢出的风险,而且不会警告
strcpy_s(point, 100, "hello world");//中间100表示有一百个字节可以分配,若拷贝的内容大于100个字节就会报错
//strcat----strcat_s升级版(字符串拼接)
cout << point <<endl;
free(point);
}

int *p = (int*)malloc(sizeof(int)*100);//分配可以放得下100个整数的内存空间
if(p != NULL)
{
int *p = q;
*q++ = 1;//赋值1
*q++ = 5;//对第二个int空间赋值5
cout<< *p<< endl;//1
cout<<*(p+1)<<endl;//5
free(p);
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享