c - 错误地初始化多维数组和内存

标签 c memory multidimensional-array

在为 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/

相关文章:

ios - 使用 iOS 应用程序以编程方式终止进程? (应用商店中的示例)

c++ - 这个 C++ 代码是可移植的吗? (假设多维数组有连续的内存布局)

java - 如何显示二维数组的行数和列数?

c - 如何协调两个进程之间的共享内存

c - C语言中标准输入的问题

c++ - 计数倒置 C++

c - 释放已分配给 char 指针(字符串)数组的内存。我必须释放每个字符串还是只释放 "main"指针?

c++ - 5 维 vector 声明

c++ - 将 grep 与 execl() 一起使用

c - Linux - C Socket to "take over"all packets == force OS to ignore all packets