C 程序在访问结构体字段的特定数组元素时崩溃

标签 c arrays pointers struct

我有这个代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

struct game_s {
  bool isOccupied[20][10];
};

int main() {
  struct game_s* game_p;
  game_p->isOccupied[0][8] = false;
  printf("0,8 works\n");
  game_p->isOccupied[2][8] = false;
  printf("2,8 works\n");
  game_p->isOccupied[1][7] = false;
  printf("1,7 works\n");
  game_p->isOccupied[1][9] = false;
  printf("1,9 works\n");
  game_p->isOccupied[1][8] = false; // crashes the program
  printf("1,8??");
}

从评论中可以看出,当我 尝试访问数组的特定元素。 (更具体地说,Windows 告诉我“a.exe 已停止工作”以及附加信息。)如果我使用其他内容 第二个维度小于 10 时,该元素将是另一个。 如果我不使用结构,它就不会崩溃。如果我使用 int 而不是 bool, 它不会崩溃。如果我创建结构体的变量而不是指针,那么它 不会崩溃。

我正在使用 gcc 版本 4.5.2 在 Windows 上使用 gcc main.c 编译此文件。如果我使用 ideone,它会运行 没有问题。

有人可以告诉我这是怎么回事吗?

<小时/>

Windows 提供的有关崩溃的其他信息:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: a.exe
  Application Version:  0.0.0.0
  Application Timestamp:    558f50c8
  Fault Module Name:    KERNELBASE.dll
  Fault Module Version: 6.1.7600.17206
  Fault Module Timestamp:   50e6605e
  Exception Code:   c0000005
  Exception Offset: 00011bcd
  OS Version:   6.1.7600.2.0.0.768.3
  Locale ID:    1031
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Read our privacy statement online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:
  C:\Windows\system32\en-US\erofflps.txt

最佳答案

尝试类似的事情

struct game_s* game_p = malloc(sizeof(struct game_s));

这样就分配了内存

关于C 程序在访问结构体字段的特定数组元素时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095342/

相关文章:

c - 在 C 中用 '%20' 替换空格

c - 是否可以在 C 中为 uint64_t 指针添加下标?

c - 在 C 中使用 getche 在结构中输入一个字符?

返回 'Array' 的 PHP MySQL 查询

python - 将 numpy 数组中 2 个范围之间的所有值设置为特定值

c - 从 C 中的函数返回后数组元素发生变化

c++ - C++中箭头和点运算符在不同情况下的解释

c - 为什么 union* 和 struct* 之间会有区别?

c - 国际对/秒。长C

c - 这个等式返回 bool 还是 int?