公开课学习笔记- 哈佛 计算机科学CS50(五)

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

第11课 内存、头文件和数据结构 - 2011.10.30

对于C语言,内存分配是非常重要的,这涉及到程序的稳定性和安全性。假设有在stack中存储username和pw这样安全敏感的数据,有风险,因为函数返回时,这些内容并没有真正消失,如果是我们自己的程序,确保只有我们自己的代码访问内存没有问题,但是如果是合作性的或者是库方式,有buffer overflow exploit的隐患。例如,通过memcpy覆盖函数的返回地址(存放在stack),可以跳到hacker代码的入口。因此我们要注意检测数据的边界,不允许越界处理,另外这类数据可采用heap的存放方式,自主控制分配和释放(stack的是由系统自动进行)。此外我们要避免将某些敏感数值,例如pw写死,作为initialized data,相对地址和数值固定不变,存在风险,可以通过gdb或者某些方式来获取。在java,不会出现这种情况,所有内存分配和释放都是系统进行。

有一个以前没用过的空间分配函数 realloc(),就是重新分配的意思,可以用了扩大内存大小,而不影响原有的数据。realloc实际调用malloc,并将原来的内容memcopy过来,free原来的内容。

接着介绍了头文件,自定义数据类型和文件读写。

第12课 内存,文件存放,链表 -2011.10.31

sscanf,语法和printf相似,但是不是写,而是从中读取。例如sscanf(line," %d %c",&n,&c);则根据格式,将line的相应内容读入n和c中,返回读取的内容,如果line="123",则只能读取%d到n,1个数据,返回1,如果line"123X",则读取两个数据,返回2。scanf是从keyborad中读取,同理。

介绍数组。数组预先限定大小,允许分配某个固定值,都可能产生越界。采用realloc可以解决,但是效率较低。接着介绍单链表。

typedef struct node{
    int n;
    struct node * next;
}t_node;

文件存放采用类似的方式,通过增加block来增加存储空间。利用此,我们可以获取或猜测已删除文件的的地址,并进行恢复。例如加入一个文件,可以从文件读取前前面地址存放的数据。具体和disk文件架构相关。

介绍单链表的增、删处理。

相关链接:我的与编程思想相关的文章

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值