为什么我的程序在几次运行后崩溃了?

时间:2015-10-23 12:03:22

标签: c++ arrays

我是C ++的新手。我的程序似乎编译得很好,但它每4-5次运行崩溃。它似乎在前几次运行时工作正常,但过了一段时间,我会收到一个错误,我的程序将停止工作。

这是它在调试器中告诉我的,但我无法弄清楚导致崩溃的行。我相信我没有正确删除动态分配的内存或尝试访问空指针。我一直在拔头发,但不能把头包住。

enter image description here

#include <iostream>
using namespace std;


int** test(int*, int);

int main() {
    int arr[3] = { 135, 3028063, 247777 };
    int** p = test(arr, 3);
    int count = 0;
    const int size2 = 10;

    for (int i = 0; i < size2; ++i) {
        if (p[0][i] == 1) {
            cout << i << " occurs " << p[1][i] << " times." << endl;
        }
    }

    return 0;

}

int** test(int* ary, int size) {
    int i, j;
    int tmp;
    int** tmpAry;
    const int size2 = 10;
    tmpAry = new int*[size];
    int totals[size2] = { 0 };
    int* uncommons = new int[size2]();
    int** a = new int*[size2];

    for (i = 0; i < size; i++) {
        tmpAry[i] = new int[size2 + 1]();
        tmp = ary[i];
        if (tmp < 0)
            tmp = -tmp;

        while (tmp != 0) {
            tmpAry[i][tmp % 10]++;
            totals[tmp % 10]++;
            tmp /= 10;
        }
    }

    for (i = 0; i < size; i++) {
        for (j = 0; j < size2; j++) {
            if (tmpAry[i][j] != 0 &&
                tmpAry[i][j] == totals[j]) {
                uncommons[j]++;
                tmpAry[i][size2] += tmpAry[i][j];
            }
        }
    }

    for (int i = 0; i < size2; i++) {
        a[i] = new int[2]();
    }


    // pointers to parts
    int* array1 = a[0];
    int* array2 = a[1];

    // fill "arrays"
    for (i = 0; i < size2; ++i) {
        if (uncommons[i])
        array1[i] = uncommons[i];
    }
    for (i = 0; i<size2; ++i) {
        array2[i] = totals[i];
    }

    return a;
    for (int i = 0; i < size2; i++) {
        delete[] a[i];
    }
    delete[] a;
}

任何人都可以帮助指出我的错误吗?谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

在点击该代码之前,您delete永远不会returnstd::vector所以你有一个内存泄漏,最终崩溃你的程序。使用智能点,或者更好的标准容器之一,例如std::arrayif ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$ ) { return 444; } ,你会更好

答案 1 :(得分:0)

似乎问题是写出数组a的界限。请参阅a是一个10x2阵列。

const int size2 = 10;
int** a = new int*[size2];

for (int i = 0; i < size2; i++) {
    a[i] = new int[2]();
}

int* array1 = a[0];
int* array2 = a[1];

array1是一个大小为2的数组

// fill "arrays"
for (i = 0; i < size2; ++i) {
    if (uncommons[i])
    array1[i] = uncommons[i];
}
for (i = 0; i<size2; ++i) {
   array2[i] = totals[i];
}

你写信给array1[2], array1[3], ...array2也一样。

如果您的程序不时崩溃,很可能会出现内存损坏问题。

相关问题