来自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/