[英]Unhandled exception thrown: read access violation in simple c++ program that dynamically increase the array length to store numbers
我正在做一個 c++ 分配,允許用戶一個一個地輸入數字然后存儲在一個數組中,並動態增加這個數組的容量(乘以 2)。 基本上是使用一些基本代碼來模仿“向量”。
#include<iostream>
using namespace std;
struct myArray {
const size_t initial_size = 1;
const size_t growth_factor = 2;
size_t length = 0;
size_t capacity = initial_size;
int *v; // vector
};
int main() {
int x;
myArray numbers;
while (true) {
cout << "Please input a numebr (program terminated once a -ve number is entered)" << endl;
cin >> x;
if (x < 0)
break;
if (numbers.length == numbers.capacity) {
int *temp = new int[numbers.capacity *= numbers.growth_factor];
for (size_t i = 0; i < numbers.length; ++i)
temp[i] = numbers.v[i];
delete[] numbers.v;
numbers.v = temp;
}
numbers.v[numbers.length++] = x;
}
for (size_t i = 0; i < numbers.length; ++i)
cout << numbers.v[i] << ",";
cout << endl;
return 0;
}
這是我得到的錯誤,我的第 33 行代碼旁邊有一個小紅叉: numbers.v[numbers.length++] = x; 當我 hover 越過紅十字時,這是錯誤:錯誤消息圖片
Exception thrown: read access violation.
numbers.v was 0x111011101110111. occurred
通過查看我的代碼行,我只是將 int 值“x”分配給數組“numbers.v”的第一個元素
我已經嘗試尋找其他解決方案,但是我發現其他人的問題要先進得多,並且在不同情況下,這種讀取訪問沖突錯誤似乎是由於不同的原因造成的。
當你這樣做時:
int *v;
您正在創建一個指向 int 的指針,但到目前為止它只指向未確定的 memory。 因此,即使嘗試訪問v[0]
也是未定義的行為,並且可能引發讀取訪問沖突。 initial_size
不正確。 v
一開始沒有任何元素,因此v.length
將在循環的第一次迭代中返回0
並且if
語句將評估為 false。 然后你會嘗試訪問
numbers.v[numbers.length++] = x;
這是未定義的行為。
您應該以一個元素開始v
,以便v
的起始大小正確:
int* v = new int[1];
另外不要忘記在最后釋放 memory 以避免 memory 泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.