【发布时间】:2021-03-19 12:05:32
【问题描述】:
来自this question,我明白为什么下面的代码可能不起作用:
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() 不会初始化变量,但它会在内存中保留一些空间(您需要的大小),通常您需要根据变量的类型来确定变量大小所需的空间。
-
是错字吗?
int *ptr = 1000;应该是*ptr = 1000;和第一个代码一样吗? -
“没有变量初始化”是什么意思?在变量定义期间赋值就是初始化。从哪里获得该值并不重要。
-
我想知道为什么
int *ptr; *ptr = 1000在打印时返回分段错误。当我使用 malloc 时,这并没有发生,我能够打印 ptr 指向的值。