我是C ++的新手。我的程序似乎编译得很好,但它每4-5次运行崩溃。它似乎在前几次运行时工作正常,但过了一段时间,我会收到一个错误,我的程序将停止工作。
这是它在调试器中告诉我的,但我无法弄清楚导致崩溃的行。我相信我没有正确删除动态分配的内存或尝试访问空指针。我一直在拔头发,但不能把头包住。
#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;
}
任何人都可以帮助指出我的错误吗?谢谢你的时间。
答案 0 :(得分:0)
在点击该代码之前,您delete
永远不会return
。std::vector
所以你有一个内存泄漏,最终崩溃你的程序。使用智能点,或者更好的标准容器之一,例如std::array
或if ($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
也一样。
如果您的程序不时崩溃,很可能会出现内存损坏问题。