malloc 结构体_小知识速记 | malloc分配内存,字符串赋值问题

06fd975fb9659996c305326c39c10736.png

C语言是一种很灵活的语言,在程序调试过程中常常会遇到一些难解决的问题,一般语法错误计算机能检测出来,而逻辑错误计算机则检测不出来。这给教师的教学带来比较多的麻烦,也大大削减了学生学习的自信心。所以我把易出错的知识点进行一一列举。

同学:这个动态分配的内存为啥释放会出错呢?

  char *str = (char*)malloc(sizeof(char) * 10);  str = "C语言Plus";  printf("%s", str);  free(str);

dd88cc2d394425e33bb658822c4d5acb.png

老师:这个是因为你申请了之后,把指针的指向改变了,不再指向你申请的内存空间了,而是指向了静态区的字符串,所以释放的不是动态申请的空间,所以会出错。而且动态申请的空间还存在,只是你找不到了,所以需要给动态申请的空间赋值字符串请用strcpy,如下:

  char *str = (char*)malloc(sizeof(char) * 10);  strcpy(str, "C语言Plus");  printf("%s", str);  free(str);

6f3c68175423e836a7997a99b755a0c9.png

是吧,现在就没有错误了,一定要注意哦,后面结构体也会遇到这个问题

ff36989a2193c82f71384874253523fe.png 5cf800a55b90498ce103b59484520d82.png 33d27b93f39cfe690ee41084be9e73f3.png 5cf800a55b90498ce103b59484520d82.png
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值