C++:写入/读取无效/超出绑定的数组索引?

Byz*_*ian 2 c++ arrays indexing

首先,我是C++编程的初学者.昨天我遇到了一些比较奇怪的事情.我试图通过指向它的指针来确定数组的长度.由于sizeof不起作用,我做了一点谷歌搜索,最后在这个网站上我找到了答案,这是不可能的.相反,我应该在数组的最后一个索引处放置一个超出值的值,并递增计数器,直到达到此索引.因为我不想覆盖最后一个索引中包含的信息,所以我尝试将最后一个索引放在一个索引之后.我预计它会失败,但由于某种原因它没有.

我以为我在其他地方犯了一个错误,那个数组比我指定的更长,所以我做了以下测试:

int a[4];
a[20] = 42;
std::cout << a[20];
Run Code Online (Sandbox Code Playgroud)

输出为42,没有任何错误.为什么这样做?这根本不应该有效,对吧?更有趣的是,这适用于任何基本类型数组.但是,一旦我使用std :: string,程序立即存在1.

有任何想法吗?

Sca*_*nth 6

您的系统恰好没有使用刚刚20 * sizeof(int)从阵列地址开始的字节的内存.(从一开始.)或者记忆属于你的过程,因此你可以搞砸它,或者为自己打破一些东西,或者只是通过幸运巧合打破一切.

底线,不要那样做:)