为什么函数可以通过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}; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |