malloc 不能返回动态内存

关于malloc的理解:

#include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
  p=(char *) malloc(100);
  strcpy(p,"hello world");
}
int main( )
{
  char *str=NULL;
  getmemory(str);
  printf("%s/n",str);
  free(str);
  return 0;
}

程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险。

当参数是指针时容易忽略,请不要用值传递(这样会导致str没有指向分配到的内存),C语言里没有引用的话就用指针传。
C语言是值传递,故在函数调用中修改的值,并不会返传至主调函数。所以原程序在getmemory函数中malloc获得的地址空间的首地址的值只在函数内部有效,函数调用结束后该值就丢失了

传值是把实参的值拷贝给形参,运算中是对形参进行操作,实参的值在运算中不会发生变化
传址是把实参的地址传给形参,运算中是对实参进行操作,会改变实参的值

此段代码有错,getmemory(str)中参数问题。编译器会为每个函数的参数都复制一份临时副本,指针参数 p 的副本在C中是_p,并且对_p赋值为p ,即 _p = p 。如果在getmemory函数体内修改了 _p 所指向的内容,则导致参数 p 所指向的内容做相应的修改,这就是指针可用作输出参数的原因。但此处中getmemory 函数的 _p 申请了新内存,此时 _p 所指的内存地址改变了,但是 p 没变。所以每次调用ge

全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务