C day08

2021.6.9

EXE File英文全名executable(a.可执行的) file

bss区:block started by symbol,以符号开始的块

heap segment(段):堆

栈区存储数据,在内存中,从高地址存向低地址

    数组例外,在高地址一端开辟空间后,arr[0]-arr[n]从低地址往高地址存储

    函数参数,从右往左加载入栈,先入栈的右端参数,先存入高地址

加载:表示启动程序时文件或信息的载入。

如何避免野指针的出现:在free(p)后,令p=NULL,避免后面乱使用野指针

C语言中,实数类型=浮点数类型

 

-malloc:memory allocation(n.分配),动态内存分配

-void *calloc(unsigned int num,unsigned int size):(contiguous(连续的) memory allocation)

num(对象个数),size(对象占据的内存字节数)

在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。

相较于malloc函数,calloc函数会自动将内存初始化为0。而malloc不做初始化,分配到空间中的数据是随机数据。

-void *realloc(void *mem_address,unsigned int newsize): (reallocate v.重新分配)

判断是否有足够大的连续空间,有则开辟并返回原指针;如空间不够,则另开辟一块并拷贝,而后释放之前指针所指的内存区域,并返回新指针

注意事项:
1. 不free()会造成内存泄漏。
2. newsize小于原先的大小的时候,可能会造成数据丢失。
4. 如果newsize大小为0,那么释放mem_address指向的内存,并返回NULL。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄漏(没free到,失去了对某段内存的控制)。


5.如果没有足够可用的内存用来完成重新分配(扩大原来的内存块,或分配新的内存块),则返回NULL。而原来的内存块保持不变。
6.传递给realloc的指针可以为空,效果等同于malloc。

 

指针变量,++、--,改变的是指针指向的位置,向右偏移、向左偏移

memset(void *s, int c, size_t n):可用于栈区、堆区

s需操作内存的首地址,c(0-255)每个字节都改成c,总共该n个字节。

 

2021.6.10

开辟堆空间后,用多了,在释放的时候,会报错

堆空间不能多次释放,因为第2次释放的是野指针,为了避免野指针出现,可对指针赋值为NULL(空指针),因为空指针不但可以释放,还可以多次释放

无法打开XXX.exe进行写入——关闭重启VS;或在任务管理器关闭XXX.exe进程

值传递(形参是复制品,无法改变实参)与地址传递(改变了实参)

同级别(EG:一级指针和一级指针),为值传递

system("cls"),clear(v. 清除) screen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值