我是C语言的新手,几个月来我一直在使用指针,试图弄清它们的工作原理并学习使用它们的语法,但是当编译器抛出错误时,我遇到了令人困惑的部分,[1] 1473 segmentation fault (core dumped) ./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'的警告。如果未收到警告,请查看是否可以将编译器配置为更严格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句