在为 AVR 微 Controller 编写一些代码时,我的代码可以编译,但在运行时会崩溃(当我在微 Controller 上运行代码时,微 Controller 将停止运行)在进行了一些故障排除后,我意识到我错误地初始化了多维数组。
我的问题是如何分配数组的内存,是否有可能由于该内存位置中应该有数据而没有数据,这是否会导致崩溃?
假设我有一个二维数组。通常,如果初始化正确,可能看起来像这样:
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" }
};
所以我分配了很多内存但没有使用它。在运行时,为我的数组分配的未使用的内存部分是否有可能被程序的另一部分使用,从而导致崩溃?
最佳答案
当您使用以下方式初始化数组时:
char *monthsDays[12][2] = {
{"Jan", "31" },
{"Feb", "28" }
};
monthsDays[2][0]
到 monthsDays[11][1]
初始化为 0
。取消引用它们将导致 UB。问题是否是由于取消引用这些 NULL 指针或其他代码占用这些内存而引起的,只有您可以通过查看其余代码来判断。
关于c - 错误地初始化多维数组和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327184/