为什么以下代码会崩溃。 (动态记忆)?

why does the following code crash. (dynamic memory)?

我的程序计算字符串中从 0 到 9 的每个数字的出现次数。在我看来,我已经正确地完成了所有操作,但问题仍然存在。

int main(){
    string word = "23456745";
    int* ReturnArray = count(word);

    for(int i =0; i < 10; i++){
        cout << i << ": " <<  ReturnArray[i] << " \n";
    }

    delete [] ReturnArray;

    return 0;
}

int* count(const string& s){
    int length = s.length();
    int* array = new int(10);
    int counter =0;

    for(int j = 0 ; j < 10 ; j++) {
        for(int i = 0 ; i < length ; i++) {
            char character = s[i];
            int value = static_cast<int>(character -'0');
            if(value == j)
                counter++;
        }
        array[j] = counter;
        counter = 0;
    }
    return array;
}
int* array = new int(10);

这将创建一个值为 10 的整数...对于您想要 [10] 而不是 (10) 的 10 个整数。那我建议你输入...

std::cerr << "j " << j << '\n';  // add some trace
array[j] = counter;

...并学习调试。

当你让它工作时,重写它以使用 std::vector - 这是一种更安全、更强大的方法。