无法将 int 分配给 C 中取消引用的 int

标签 c int dereference

我迷路了。我无法将 int 分配给取消引用的 int *

  printf("in octave\n");

  int *default_octave;
  printf("attr[%d]: %s\n",i+1,attr[i+1]);

  const char *octave_char = attr[i+1];
  printf("octave_char: %s\n", octave_char);

  int octave_number = atoi(octave_char);
  printf("octave_number: %d\n", octave_number);
  fflush(stdout);

  *default_octave=octave_number;
  printf("in octave pt 2\n");
  fflush(stdout);

这是输出:

in octave
attr[1]: 4
octave_char: 4
octave_number: 4
Segmentation fault

为什么?

运行 GDB 调试器会到达该行,然后也会出现段错误。

4

0            int octave_number = atoi(octave_char);
(gdb) s
41            printf("octave_number: %d\n", octave_number);
(gdb)
octave_number: 4
42            fflush(stdout);
(gdb)
43            *default_octave=octave_number;
(gdb) print octave_number
$1 = 4
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400a7b in parse_song (song_data=0x7fffffffe7a8, attr=0x602600) at nullaby.c:43
43            *default_octave=octave_number;
(gdb)

我不知道我能做些什么来解决这个问题。

最佳答案

它会出现段错误,因为您从未将 default_octave 初始化为指向任何可以存储 int 的对象。

关于无法将 int 分配给 C 中取消引用的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935462/

相关文章:

c# - 是否可以从 VSTO 中的 Range.Value 获取一个 int?

C、无法通过取消引用检索变量值,未知段错误

reference - 什么允许在调用方法时从结构隐式转换为其引用?

c - 从 LKM 发送数据到用户空间

c++ - IPv4 和 IPv6 地址的 connect() 行为

c++ - 宏函数调用缺少参数警告,即使给定了参数

java - 整数数组还是单个整数?

c - 在 Unix/Linux 上用 C 动态确定终端高度的最佳方法是什么?

c - 如何在 C 中将一个字符中的两个数字相加?

rust - 当 T 不是副本时,为什么取消引用 Box<T> 不会提示 "moving out of shared reference"?