琐碎的日常和反思>>C(1)

琐碎的日常 C(1)

malloc和free

malloc

malloc某典型用法
(SqStack *)malloc(sizeof(SqStack))
malloc,本质也是个函数,用来手动分配内存。(SqStack *)是malloc的返回值类型,是一个SqStack类型的指针。因为malloc要分配内存,分配之后返回这个内存首地质,用指针来接收,要储存什么类型的数据,就用什么数据类型的指针。后面的()里,是分配内存的大小 。
malloc申请的是堆中内存,是连续的,如果没有这么大的内存,返回NULL。可以用if(s!=NULL)来判断是否申请成功。(其中,s是指针,举个例子

int *s;//有一个int型指针s,用来存放malloc返回的内存首地质
s=(int *)malloc(10);//要储存int型数据,分配了10byte的内存


如果只有malloc没有free释放内存,就会造成内存泄漏(当然,程序结束后OS会收回内存)。
malloc和free一一对应,毕竟出来混迟早是要还的(?)。

Free

Words are light, show me the codes!C_M同学多么希望遇见一个陪她熬夜写代码,debug, 话少代码好的猿猿呐,嘤嘤嘤(?不,我c语言,不需要对象)

void DestroyStack(SqStack *&s)//销毁顺序栈
{
free(s);
}

前面说了,malloc 返回了内存首地质,指针s接收了它,free(s),s就无法指向这块内存了。但这时,内存中的数据还在,只是无法访问。并且,s中还是保存了原来那个地址,只是无法用它访问内存中的数据了。所以,如果想避免野指针的出现,可以用s=NULL;

C_M同学关于自己写代码效率低下的反思

为什么妾身写代码这么慢?仔细分析,有两点问题。
1.手速跟不上思维。C_M同学不会盲打,手速还是太慢了。
2.喜欢一边写main,一边写被调用的函数。写main的时候想到这里要用个什么功能,那里要用个什么实现,然后一边写这个,一边写那个,主线支线并进的后果是,打断连贯的思路。并且很有可能写着写着发现某个部分有问题,又匆匆去改,这样很不好。可以先写main,理清思路,在上方声明调用,然后在完成整体之后,逐个突破各个小的部分,化整为零。

猜你喜欢

转载自blog.csdn.net/weixin_44540329/article/details/88750992
今日推荐