c - 访问C中的外部分配空间

标签 c arrays memory dynamic malloc

嗯,我一直认为如果我调用 malloc 函数,我会分配特定数量的内存,但是,我刚刚意识到如果我写:

int* a = (int*)malloc(sizeof(int) * 2);

我可以为 a[4] 或任何其他索引分配一个值,但在这种情况下,我只能分配给 a[0]a[1]。我有什么概念错误?

最佳答案

当你写a[4]时,它和写*(a + 4)是一样的。由于编译器不知道在 a 指向的地址分配了多少内存,它会很乐意让你寻址内存。

但是,位于此处的内存可以是任何东西 - 它可以是您的程序使用的另一个变量、堆栈的一部分,或者只是在您的程序范围之外。以这种方式在分配的空间之外访问可能(充其量)产生段错误或(最坏)通过覆盖程序的其他部分而引入安全漏洞。

您是正确的,因为您只能a[0]a[1] 安全地,但 C 编译器会让你在那个边界之外分配(因为它不知道有什么不同)。

在您的示例中执行 a[4] 是不安全的。


另外,最好not to cast the result of malloc - see this answer

关于c - 访问C中的外部分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9628602/

相关文章:

c - 两种不同结果(即正面或负面)的数组问题

python - 在 C : is it better to create a static local variable or a passing an array by pointer 中填充一个数组

c - 指向值不变

javascript - 如何在javascript中初始化一个 boolean 数组

c# - 如何在结构中声明一个结构数组?

c++ - 快速内存分配/范围问题

c++ - 如何创建生成 XML 并随后运行 DOS 命令的 C/C++ 程序?

c - dlmalloc 中的内存对齐掩码

c - opencl 映射内存不起作用

c - 每三次运行我的程序时出现段错误,使用 malloc