我是 C 的新手,几个月来我一直在使用指针并试图弄清楚它们是如何工作的并学习使用它们的语法,但是当编译器抛出错误时我遇到了一个令人困惑的部分
[1] 1473 段错误(核心已转储)./a.out
但我认为代码语法是正确的。
由于我正在使用和学习动态数据结构,很多时候一切看起来都很好,但偶尔我会遇到一些奇怪的错误,所以我提供了这个使用指针的简单示例,这让我感到困惑。
#include <stdio.h>
int main ()
{
int *b;
printf ("Enter some int value -> ");
scanf ("%d", b);
printf ("Entered value is: %d", *b);
return 0;
}
我正在声明一个变量,它是指向内存中整数的指针。由于它在 scanf() 参数中的指针只是该变量的名称,当我将它打印到 stdout(printf()) 时,我使用 *b 因为指向指针的指针是该变量的实际值。
最佳答案
*b
没有指向任何地方。试试这个:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int *b = malloc(sizeof(int)); // dynamically allocate memory
printf ("Enter some int value -> ");
scanf ("%d", b);
printf ("Entered value is: %d", *b);
free(b); // free the dynamically allocated memory
return 0;
}
或者通过指向堆栈上的变量而不是动态内存分配:
#include <stdio.h>
int main ()
{
int a;
int *b = &a;
printf ("Enter some int value -> ");
scanf ("%d", b);
printf ("Entered value is: %d", *b); // or have a instead of *b
return 0;
}
一定要考虑编译器给你的警告。您的代码可能会触发有关使用未初始化的局部变量“b”的警告。如果您没有收到警告,请查看是否可以将编译器配置得更严格。
关于c - 使用指针时的意外行为和编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431733/