在为AVR微控制器编写一些代码时,我的代码会编译但会在运行时崩溃(当我在微控制器上运行代码时,微控制器会停止运行)在做了一些故障排除后,我意识到我错误地初始化了一个多维数组。
我的问题是关于如何分配一个数组的内存,并且有可能因为该内存位置中应该有数据但是没有,这是否会导致崩溃?
假设我有一个二维数组。通常,如果正确初始化,如果看起来像这样:
char *monthsDays[12][2] = {
{"Jan", "31" },
{"Feb", "28" },
{"Mar", "31" },
{"Apr", "30" },
{"May", "31" },
{"Jun", "30" },
{"Jul", "31" },
{"Aug", "31" },
{"Sep", "30" },
{"Oct", "31" },
{"Nov", "30" },
{"Dec", "31" }
};
并说我是这样创造的:
char *monthsDays[12][2] = {
{"Jan", "31" },
{"Feb", "28" }
};
所以我分配了大量内存但没有使用它。在运行时,为我的阵列分配的未使用的内存部分是否可能被程序的另一部分使用,从而导致崩溃?
答案 0 :(得分:1)
使用以下方法初始化数组时:
char *monthsDays[12][2] = {
{"Jan", "31" },
{"Feb", "28" }
};
monthsDays[2][0]
到monthsDays[11][1]
初始化为0
。取消引用它们将导致UB。问题是由解除引用这些NULL指针引起的还是其他代码踩到这些内存引起的,只有你可以通过查看代码的其余部分来判断它。