我有这个代码:
#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/