首页 > 解决方案 > 使用 malloc 为 C 指针赋值,无需变量初始化

问题描述

这个问题,我明白为什么下面的代码可能不起作用:

int *ptr;
*ptr = 1000;
printf("%d", *ptr);

当我使用以下方法编译和运行它时:gcc file.c; ./a.out我得到了:

分段错误(核心转储)./a.out

这里的 ptr 可能指向一个没有初始化变量的随机位置。那是对的吗?

但是,使用时malloc()不会出现该问题。

int *ptr = malloc(sizeof(int));
*ptr = 1000;
printf("%d", *ptr);

malloc 是否初始化其指针指向的变量?

标签: cpointersmalloc

解决方案


简短的回答:没有

malloc 不初始化变量。它只是分配内存。您可以将整数放入函数中,例如malloc(8),它将仅分配 8 个字节供以后使用。如果您进一步查看 malloc 函数,它实际上返回void*数据类型。它可以稍后被类型转换为其他数据类型。

从您的代码malloc(sizeof(int))中,实际上sizeof(int)返回一个整数,表示您放入其中的数据类型/变量的大小。


推荐阅读