【发布时间】:2014-09-10 23:37:17
【问题描述】:
所以,我对 C 中的指针不熟悉。
我正面临着困惑。 如果有的话,
int a;
在这里,我不手动为 a 分配内存。它是由编译器自动完成的。
现在,如果以类似的方式,如果我这样做,
char * a;
我需要为指针分配内存吗?
其次,我编写了这段代码,
#include <stdio.h>
int main (void)
{
int *s=NULL;
*s=100;
printf("%d\n",*s);
return 0;
}
为什么我在这段代码中遇到了段错误?是因为我没有为指针分配内存吗?但是正如上面问题中所问的,我也可以简单地声明它,而无需手动分配内存。
PS:我是指针新手,对此我感到困惑。如果这是一个不好的问题,请饶了我。谢谢。
编辑:我在 SO 上阅读了 malloc 的帖子。
http://stackoverflow.com/questions/1963780/when-should-i-use-malloc-in-c-and-when-dont-i
它并没有真正解决我的疑问。
【问题讨论】:
-
你不需要为指针分配空间,而是为pointee。
-
int a放置在堆栈上,但不是由编译器放置。这是由系统完成的。char * a创建一个内存地址,它可能指向也可能不指向良好的内存。您必须 malloc 分配此内存以准备读取/写入。否则,您将冒险进入未定义的行为领域。您的 seg 错误是由于在准备好使用内存之前使用内存造成的。 -
一个是分配内存,另一个是与该内存关联的变量指向什么。因此,当我声明
char * a时,系统只分配 4 个字节并将该内存命名为a但它没有初始化到任何位置。我这样说对吗? -
阅读 C dynamic memory allocation 上的 wikipage,并花几个小时阅读有关 C 编程的更多信息。