簡體   English   中英

為什么這個 C++ function 不是 output 我想要什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM