c - 使用 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 是否初始化其指针指向的变量?
解决方案
简短的回答:没有
malloc 不初始化变量。它只是分配内存。您可以将整数放入函数中,例如malloc(8)
,它将仅分配 8 个字节供以后使用。如果您进一步查看 malloc 函数,它实际上返回void*
数据类型。它可以稍后被类型转换为其他数据类型。
从您的代码malloc(sizeof(int))
中,实际上sizeof(int)
返回一个整数,表示您放入其中的数据类型/变量的大小。
推荐阅读
- angularjs - AngularJS的AngularUI引导弹出问题
- xml - 仅使用 xslt 从 xml 中选择具有子项的子项
- javascript - KnockoutJS css和class在同一个绑定
- java - Java 客户端库的 Dialogflow Fulfillment
- ios - 出现键盘时调整IOS WKWebView的大小
- python - 从字符串中删除 shell 转义字符
- javascript - 知道如何解决这个问题,所以我没有得到 Javascript TypeError:'in' 的右侧应该是一个对象,得到字符串
- bash - Bash Shell计算MAC OS中文件夹内所有视频持续时间的总和
- flutter - 同时调用多个 http 端点,合并结果并返回到 dart 中的单个 futurebuilder
- reactjs - React 组件的类型声明首选项