簡體   English   中英

在C ++中“調整大小”數組時發生訪問沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM