內存管理我有一個小程序:與刪除
#include <iostream>
using namespace std;
void inputArray(int*& p, int& n);
void print(int *p, int n);
int main() {
int size = 0;
int *arr;
inputArray(arr, size);
}
void inputArray(int*& p, int& n) {
int *q = new int[n]; int m = n;
for (int i = 0; i < n; ++i) q[i] = p[i];
cout << endl << "How many numbers to insert? "; cin >> n;
delete p;
p = new int[n + m];
for (int i = 0; i < m; ++i) p[i] = q[i];
for (int i = 0; i < n; ++i) cin >> p[i + m];
n += m;
}
此方案的目的是要插入整數的數組。然而,當我嘗試在Ubuntu上運行使用代碼:: Blocks的程序,它經常說:
free(): invalid pointer: 0xb7646000 ***
後,我輸入的n個。
但是,當我刪除delete p;
時,一切正常。但是,我仍然想知道這個問題。任何人都可以告訴問題是什麼?
你有未定義的行爲,'p'(這是從主'arr')未初始化,但你嘗試刪除它。 – Borgleader
嘗試'int * arr = null;' – user3528438
請不要以這種方式改變指針 - 你有內存泄漏(即使有正確初始化的'arr = 0) –