加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么函数可以通过malloc返回数组设置,但不能通过“int cat [3]

发布时间:2020-12-16 10:43:16 所属栏目:百科 来源:网络整理
导读:为什么我可以通过malloc从函数返回数组设置: int *dog = (int*)malloc(n * sizeof(int)); 但不是由数组设置 int cat[3] = {0,0}; 返回“cat []”数组并显示警告. 感谢你的帮助 解决方法 正在运行的程序中有两个关键的内存部分:堆栈和堆.堆栈也称为调用堆栈
为什么我可以通过malloc从函数返回数组设置:

int *dog = (int*)malloc(n * sizeof(int));

但不是由数组设置

int cat[3] = {0,0};

返回“cat []”数组并显示警告.

感谢你的帮助

解决方法

正在运行的程序中有两个关键的内存部分:堆栈和堆.堆栈也称为调用堆栈.

进行函数调用时,有关参数,返回位置以及函数范围中定义的所有变量的信息将被压入堆栈. (过去的情况是C变量只能在函数的开头定义.主要是因为它使编译器编写者的生活更轻松.)

当你从一个函数返回时,堆栈上的所有内容都会弹出并消失(很快当你进行更多的函数调用时,你会覆盖那个内存,所以你不想指向它!)

无论何时分配内存,都要从堆中分配.这是内存的其他部分,由分配管理器维护.一旦你“保留”它的一部分,你就要对它负责,如果你想停止指向它,你应该让经理知道.如果你放下指针并且不能要求让它再次释放,那就是泄漏.

你也应该只看你想要的记忆部分.不仅要覆盖你想要的部分,而且要过去(或之前)部分内存是一种经典的漏洞技术:将信息写入存储计算机指令而不是数据的内存部分.了解编译器和运行时如何管理事物有助于专家了解如何执行此操作.精心设计的操作系统阻止他们这样做.

堆:

int *dog = (int*)malloc(n*sizeof(int*));

堆:

int cat[3] = {0,0};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读