c - 使用指针时的意外行为和编译器错误

标签 c pointers integer

我是 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/

相关文章:

c - 查找数组中第一个非整数实例

c++ - 无符号与有符号整数的性能

C 格式字符串 printf ("%lld") 错误结果

c - 头文件和库

c++ - 为什么指向数组表达式的指针起作用

c++ - 使用重载取消引用运算符的成员选择

带指针的 calloc() 语法声明

c++ - 如何以编程方式清理 linux 中的页面缓存

c - 为什么 "barrier()"足以禁用或启用抢占?

java - 使用 Android 时 Java 中的随机数