我一直在用指针进行一些测试,并遇到了以下两种情况。谁能向我解释发生了什么?
void t ();
void wrong_t ();
void t () {
int i;
for (i=0;i<1;i++) {
int *p;
int a = 54;
p = &a;
printf("%d\n", *p);
}
}
void wrong_t() {
int i;
for (i=0;i<1;i++) {
int *p;
*p = 54;
printf("%d\n", *p);
}
}
考虑以下两个版本的 main:
int main () {
t();
wrong_t();
}
打印:54\n54\n,如预期的那样
int main () {
wrong_t();
}
产量:分段错误:11
我认为问题出在“wrong_t()”中的“int *p”是一个“坏指针”,因为它没有正确初始化(cfr.:cslibrary.stanford.edu/102/PointersAndMemory.pdf,第 8 页)。但是我不明白为什么在某些情况下会出现这样的问题(例如:如果我在 wrong_t() 之前调用 t() 或者如果我删除了 wrong_t() 中代码周围的 for 循环,则不会发生这种问题)。