[英]Access violation when “resizing” array in C++
因此,我正在嘗試創建一個函數,該函數將成員數組“調整大小”為作為參數傳遞的新大小。 通過“調整大小”,我的意思是應該將成員數組設置為具有新大小的新數組,從舊數組中復制元素,然后釋放與舊數組關聯的內存。 這是我到目前為止的內容:
void MemoryTest::resize(unsigned int new_size) {
if (size == new_size)
return;
int* oldPtr = elements;
elements = new int[new_size + 1];
for (int i = 0; i < (new_size < size) ? new_size : size; i++)
elements[i] = oldPtr[i];
elements[new_size] = '\0';
if (size > new_size)
size = new_size;
delete[] oldPtr; // Deallocate old elements array
}
elements是初始化為NULL的私有成員int *。
但是,當它開始for循環時,程序會暫停一會兒,然后再對elements [i] = oldPtr [i]行給出訪問沖突。 如果我錯了(可能是我),請有人糾正我,但我的理解是oldPtr應該是一個指向與元素相同的初始點的指針。 然后,我將元素設置為一個新數組,因此這兩個元素現在指向兩個不同的事物。 然后,我遍歷元素,將每個項目設置為與舊數組中的項目相同。
另外,盡管我通常會使用向量來避免這種情況,但我正在嘗試更加熟悉C ++中的指針和內存分配。
提前致謝!
for (int i = 0; i < (new_size < size) ? new_size : size; i++)
應該讀
for (int i = 0; (i < (new_size < size)) ? new_size : size; i++)
因此, for (int i = 0; i < ((new_size < size) ? new_size : size); i++)
應該更正您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.