[英]Why does my program crash after a few runs?
我對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;
}
誰能幫我指出我的錯誤? 謝謝你的時間。
您永遠不會delete
任何內容,因為您在碰到該代碼之前會先return
。 因此,您會遇到內存泄漏,最終導致程序崩潰。 你會好得多使用智能點,或更好的標准容器,比如一個std::vector
或std::array
。
看來問題出在數組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
相同。
如果程序不時崩潰,則很有可能出現內存損壞問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.