繁体   English   中英

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

[英]C++: Write to/read from invalid/out of bound array index?

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

我认为我在其他地方犯了一个错误,并且数组比我分配的要长,所以我做了以下测试:

int a[4];
a[20] = 42;
std::cout << a[20];

您的系统恰好没有使用距数组地址20 * sizeof(int)字节的内存。 (从一开始。)或者记忆属于你的过程,因此你可以把它弄乱,要么自己破坏一些东西,要么只是幸运的巧合什么都不破坏。

底线,不要那样做:)

我认为您需要了解以下内容:
当您创建a[4]时,编译器为 4 个整数分配内存并在a中记住第一个整数的地址:( *a == &(a[0]) )。
当您读\\写时,编译器不会检查您是否在界限内(因为他不再拥有此信息)。 只需按以下方式转到请求的数组单元格的地址: a[X] == &(a + sizeof(int) * X)
在 C++ 中,访问数组时检查边界是程序员的责任。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM