c - 使用 malloc 为 C 指针赋值,无需变量初始化

标签 c pointers malloc

来自this question ,我明白为什么下面的代码可能不起作用:

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

当我使用以下命令编译并运行它时:gcc file.c; ./a.out 我得到:

Segmentation fault (core dumped) ./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)返回您放入其中的数据类型/变量的大小的整数。

关于c - 使用 malloc 为 C 指针赋值,无需变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65194338/

相关文章:

c - 交换结构数组中的元素

结构中带有变量的cout的c++顺序会更改内容吗?

c - 指向二维数组的指针

c - 如何正确地将内存分配给 C 中的数组?

c - 从 C 中的函数返回指针错误

c - 可以为同一个应用程序编译具有不同 gcc 优化级别的文件吗?

在C处编译错误netbeans,cygwin

c - malloc/memcpy 函数在 NUMA 上独立运行吗?

c - 将字符串数组传递给函数

c - 如何分离一个数组并将其存储到一个新数组中?