[英]Why does this C++ function not output what I want?
#include <iostream.h>
using namespace std;
int main() {
int i, n = 5, k, a;
cin >> k;
cin >> a;
int v[] = { 1,2,3,4,5 };
for (i = 0; i < n; i++) {
v[i] = i + 1;
}
for (i = n; i >= k - 1; i--) {
v[i + 1] = v[i];
}
v[k - 1] = a;
for (i = 0; i < n + 1; i++) {
cout << v[i] << " ";
}
return 0;
}
k = 2 和 a = 10
似乎向量 output 應該是“1 10 2 3 4 5”,但是當我運行它時,output 是“1 2 3 4 5 10”。
這是為什么?
第一個循環是多余的,v 已經設置為 { 1, 2, 3, 4, 5}。
第二個循環有緩沖區溢出。 “i”從 5 開始,因此 v[i+1] 嘗試訪問第六個數組元素,但是該數組只有零到四(五個元素)的索引。
最后,對於“v[k - 1] = a”語句,由於 k=2 和 a=10,這會將 10 放在索引 1 處。
Result: 1, 10, 2, 3, 4.
順便說一句,嘗試通過 GCC 或 Clang 的消毒劑運行您的代碼。 這些將在您的代碼中發現緩沖區溢出。
$ c++ -fsanitize=address -g example.cpp
$ ./a.out
<snip>
SUMMARY: AddressSanitizer: stack-buffer-overflow example.cpp:17 in main
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.