c - 基本 C 内存分配
问题描述
#include <stdio.h>
#include <stdlib.h>
void allocateMem(int *a)
{
a = (int*)malloc(5 * sizeof(int));
}
int main()
{
int *ptr;
allocateMem(ptr);
ptr[0] = 5454;
ptr[1] = 54;
printf("Hi %d\n", ptr[1]);
free(ptr);
return 0;
}
我没有得到任何输出和代码错误。但是如果我在主函数中分配内存,它实际上是有效的。
解决方案
C 函数参数按值传递。这意味着当您传递ptr
到allocateMem
然后在 内修改它时allocateMem
,您不会更改任何关于ptr
.
您正在创建内存泄漏,因为您无法释放动态分配的内存,因为您没有保留指向它的指针。
您希望函数在您调用的函数外部修改任何参数,您需要传递一个指针,因此如果您想修改一个指针,您需要将一个指针传递给一个指针,正如@babon 所展示的那样他们答案中的代码。
推荐阅读
- ruby-on-rails - Rails:无法从 URL 保存文件并将其保存到 Amazon S3 (S3::Error::ResponseError)
- sql - 通过在多个字段上连接两个表来创建类似联合 B 的输出结构
- javascript - 无需物理单击即可打开元素的 contextMenu
- oop - 服务访问实体属性
- javascript - 如何在同名的子类方法中调用父类方法?
- ruby - Nokogiri builder #to_xml,添加文本片段后没有回车
- antlr - 不要在给定点读取特定令牌
- c# - 获取多维数组的一个值并将其放入一维数组中
- opencl - get_local_id(0) 的值
- javascript - res.send 没有发送数据来获取 api