c - 在 C 中是否存在内存溢出或覆盖的情况?

标签 c arrays pointers

<分区>

这是我的代码。我正在玩我写的一小段代码。

即使指针的字符数组有 2 个元素,我也可以使用该字符数组的指针地址间接写入内存位置,即使它只有 2 个元素也是如此。

我可能以错误的方式思考,或者因为我今天用力过度。

我希望有人能对此有所启发。

#include <stdio.h>

int main(void)
{
    char a[] ="GKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3u";
    char b[] ="GKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3uGKdkOSwdDMjQKT6fgZ3u";
    char *line_store[2];
    *(line_store) = a;
    *(line_store + 2) = b;
    printf("%s\n\n", *(line_store));
    printf("%s\n\n", *(line_store+1));
    printf("%s\n\n", *(line_store+2));
    return 0;
}

最佳答案

您的代码可以运行,因为 C 不会对您的数组进行任何边界检查。你写的超出了你分配的最后一个元素,这导致它写入内存中未分配的空间。这可能是偶然的,后续运行理论上可能会崩溃,或覆盖其他有效内存段,具体取决于在较大程序中的位置和方式。

关于c - 在 C 中是否存在内存溢出或覆盖的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669206/

相关文章:

c - 未初始化的值 - if_nan 函数

c - C 编译语言中的垃圾收集

c - 从链表中删除所有节点时遇到问题

C 错误数组 : array type has incomplete element type.

c++ - 如何创建接受二维数组的构造函数

javascript - 如何在javascript中用空行分割字符串

javascript - 如何获取数组中所有出现的相同值的索引?

c++ - 在堆栈类中使用指针?

c++ - 在 C++ 中通过引用选项传递

C指针在循环中变为NULL