簡體   English   中英

C++ 陣列中的 C6385 和 C6201 警告

[英]C6385 & C6201 Warning in C++ array

我在將兩個排序的 arrays 合並為一個排序數組時收到一條警告消息,如下所示:並且出現的錯誤或警告消息是:C6385 和 C6201

#include <iostream>
using namespace std;

int main()
{
    int arr1[5] = { 1,3,5,7,9 }, arr2[5] = { 0,2,4,6,8 }, arr3[10];

    for (int i = 1; i <= 9; i++)
        if (arr1[i] < arr2[i])
            arr3[i] = arr1[i];
        else
            arr3[i] = arr2[i];
        cout << arr3[10] << endl;

    return 0;
}

C++ 中的數組索引從 0 開始。

還有這個說法

cout << arr3[10] << endl;

沒有 output 陣列。 它嘗試 output 數組索引為 10 的不存在元素。

並且該循環無效,因為它試圖訪問 memory 超出 arrays arr1 和 arr2。

您的程序可以如下所示。

#include <iostream>
using namespace std;

int main()
{
    const size_t N = 5;
    int arr1[N] = { 1,3,5,7,9 }, arr2[N] = { 0,2,4,6,8 }, arr3[2 * N];

    for ( size_t i = 0, j = 0, k = 0; i < 2 * N; i++)
    {
        if ( arr2[k] < arr1[j])
            arr3[i] = arr2[k++];
        else
            arr3[i] = arr1[j++];
    }

    for ( const auto &item : arr3 ) cout << item << ' ';
    cout << '\n';

    return 0;
}

使用 header <algorithm>中聲明的標准算法std::merge可以執行相同的任務。

例如

#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    int a1[] = { 1, 3, 5, 7, 9 };
    int a2[] = { 0, 2, 4, 6, 8 };
    int a3[sizeof( a1 ) / sizeof( *a1 ) + sizeof( a2 ) / sizeof( *a2 )];

    std::merge( std::begin( a1 ), std::end( a1 ),
                std::begin( a2 ), std::end( a2 ),
                std::begin( a3 ) );

    for ( const auto &item : a3 ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

程序 output 與上圖相同。

0 1 2 3 4 5 6 7 8 9 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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