嗨翻C语言——数据结构与动态存储(6)

文章讨论了链表作为动态数据结构的作用,以及C语言中递归结构和指针的使用。提到了堆内存管理,包括malloc和free函数在动态存储中的应用,以及如何避免内存泄漏。此外,还介绍了strdup函数、垃圾收集的概念,以及在Linux环境下使用valgrind工具进行内存错误检测和调试信息的添加方法。
摘要由CSDN通过智能技术生成

1、为了保存可变数量的数据,可以使用链表。
2、链表是一种抽象数据类型,可以保存各种不同类型的数据。
3、递归结构要有名字,C语言不允许使用typedef来声明它。
4、给出一个指向其他结构的指针,能不能把指针换成一个递归定义的结构:C语言需要知道结构在存储器中占的具体大小,如果在结构中递归地复制它自己,那么两条数据就会不一样打。
5、栈用来保存局部变量,为了进行动态存储,需要使用堆。可以将堆看作一个储物柜。
6、堆:使用malloc()函数(memory allocaation存储器分配),他会返回一个指针。
7、堆存储器需要不断申请堆空间,这样会发生存储器泄露。为避免这种情况,需要使用
free()函数释放空间
8、malloc()通常需要接收一共参数,但是我们不知道确切字符数,所以需要与sizeof运算符连用。malloc返回通用指针,即void*类型的指针。

island *p = malloc(sizeof(island));
free(p);

9、strdup()函数总是在堆上创建空间,可以把字符串复制到堆上,

char *copy = strdup(s);

10、什么是“垃圾收集”:
一些语言会跟踪在堆上分配的数据,当不再使用他们的时候,就会释放他们。
11、sizeof运算符告诉你一共结构需要多少空间。
12、在庞大而复杂的程序里面,查找错误十分困难,可以使用valgrind工具,它用于linux操作系统。它通过伪造malloc()监控分配在堆上的数据。
13、为了在可执行文件中加入调试信息,需要加上-g开关,并重新编译源代码。

gcc -g spies.c -o spies

14、valgrind是怎么拦截malloc()与free()的?
malloc()和free()包含在C标准库中,而valgrind有一个库,里面有它自己的malloc()和free(),当用valgrind运行程序时,程序会使用valgrind函数,而不是C标准库中的函数。
15、为什么编译器在编译代码时不默认包含调试信息?
因为调试信息会使可执行文件变大,同时也可能让程序变得更慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值