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

时间:2015-06-03 05:22:48

标签: c++ memory dynamic

我的程序计算字符串中每个数字从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;
}

1 个答案:

答案 0 :(得分:6)

int* array = new int(10);

这会创建一个值为10的int ...对于您希望[10]而不是(10)的10个整数。那我建议你加入......

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

...并学会调试。

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