由于在查找字符频率期间更改数组大小而导致的问题

problem caused due to changing the size of array , during finding the frequency of charcters

#include <iostream>

using namespace std;

int main()
{
    string s;
    int hash[256];

    getline(cin, s);

    int max = 0;
    char ch;

    for (int i = 0; i < s.size(); i++)
    {
        hash[s[i]]++;
        if (hash[s[i]] > max)
        {
            max = hash[s[i]];
            ch = s[i];
        }
        else if (hash[s[i]] == max && ch > s[i])
        {
            ch = s[i];
        }
    }
    cout << ch << " " << max;
    return 0;
}

以上代码用于从给定字符串中查找字符的最大频率。问题是当我将数组初始化为零时代码工作正常(int hash[256] = {0})(256 因为它是可能的最大字符数),但是如果我不这样做,程序就不会输出正确的答案,而且如果我将其更改为 (int hash[3000];),代码也能正常运行。我不知道更改大小时出现的问题。

首先:C++中的数组不会被初始化,可以包含任意数据。使用未初始化的值将导致未定义的行为。

为什么改变数组的大小会改变任何东西?

当您调用未定义的行为时任何事情 都可能发生。从技术上讲,删除所有文件将是“正确”的实施。

在这种情况下,我想编译器会将较大的数组存储在不同的地方,而这个地方恰好包含零。

编辑

初始化有一个例外:全局数组(和变量)在程序开始时总是初始化为零。