有人可以解釋爲什麼當我回來形式的功能,我從tabOfOffsets丟失我的數據。我做了兩次相同的事情,只有第二個數組的程序崩潰。 我在函數的最後打印了這個數組的值,並且一切都清晰而正確。也許我在刪除某處出錯了? 下面是代碼。C++分配內存
#include<iostream>
#include <algorithm>
using std::cout;
using std::endl;
void changeSizeOfVector(int *tabValue, int *tabOffsets, int &oldSize, int
newSize) {
int temp = std::min(oldSize, newSize);
int *newTabOfValues = new int [newSize] {0};
int *newTabOfOffsets = new int [newSize] {0};
for (int i = 0; i < temp; i++) {
newTabOfValues[i] = tabValue[i];
newTabOfOffsets[i] = tabOffsets[i];
}
delete[] tabValue;
delete[] tabOffsets;
tabValue = new int [newSize] {0};
tabOffsets = new int [newSize] {0};
for (int i = 0; i < newSize; i++) {
tabValue[i] = newTabOfValues[i];
tabOffsets[i] = newTabOfOffsets[i];
std::cout << tabOffsets[i] << tabValue[i] << endl;
}
oldSize = newSize;
delete[] newTabOfValues;
delete[] newTabOfOffsets;
for (int i = 0; i < newSize; i++) {
std::cout << tabOffsets[i] << tabValue[i] << endl;
}
}
int main() {
int SIZE = 10;
int * tabOfOffsets = new int[SIZE];
int * tabOfValues = new int[SIZE];
for (int i = 0; i < SIZE; i++)
{
tabOfValues[i] = i;
tabOfOffsets[i] = i;
cout << tabOfValues[i] << " : " << tabOfOffsets[i] << endl;
}
changeSizeOfVector(tabOfValues, tabOfOffsets, SIZE, 12);
for (int i = 0; i < SIZE; i++) {
cout << tabOfOffsets[i] << " : " << tabOfValues[i] << endl;
}
delete[] tabOfOffsets;
delete[] tabOfValues;
}
獲得一些[良好的初學者書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),並閱讀*參考*和如何通過參數*參考*。 –
不要使用指向數組的指針。這是C風格的編程。使用'std :: vector'並通過引用傳遞。 – JHBonarius
在瞭解了參考資料並知道如何解決您的程序後,請考慮您所做的*雙重複制。爲什麼不簡單地*分配*指針?像'tabValue = newTabOfValues'?一旦你考慮並實施並測試了這些,將你的程序扔掉並學習如何使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –