访问超出为指针分配的内存的索引

jfg*_*gao -1 c memory malloc pointers

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *p = malloc(10);
    int i;
    for(i=0;i<15;i++)
    {
        p[i]='c';
        printf("INDEX:%d  %c\n",i,p[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么在上面的代码中,我只分配了 10 块内存,但我仍然能够访问指针的第 15 个索引。

我不确定为什么,但我认为这是因为这个指针指向一些随机的内存块,而我只是覆盖了这部分内存,但我只分配了特定数量的内存,所以我不确定为什么它会起作用。

有人可以确认吗?

R S*_*ahu 5

我不知道为什么在上面的代码中,我只分配了 10 块内存,但我仍然能够访问指针的第 15 个索引。

访问超出您请求的内存会导致未定义的行为。如果程序没有崩溃,你应该认为自己很不幸。它会在最不合时宜的时刻做出奇怪的举动。