Рассмотрим следующий std :: array указателей на char:
std::array<char*, 10> m_arr;
Я знаю, что могу oop пройти через массив, используя следующий код
for(size_t i {0}; i < m_arr.size(); i++) {
std::cout << m_arr.at(i) << std::endl;
}
Но это Подход выдает исключение «Место чтения нарушения прав доступа», когда i-й элемент назначен неправильно. Например, следующий код назначает первые два элемента, но третий элемент, m_arr.at(3)
, вызывает вышеупомянутую ошибку:
// test variables
int x {100};
double y {3.14};
int* x_ptr {&x};
double* y_ptr {&y};
// std::array of pointer to char
std::array<char*, 10> m_arr;
// set the first two elements of m_arr
char buf1[16];
sprintf_s(buf1, "%p", x_ptr);
m_arr.at(0) = buf1;
char buf2[16];
sprintf_s(buf2, "%p", y_ptr);
m_arr.at(1) = buf2;
for(size_t i {0}; i < m_arr.size(); i++) {
std::cout << m_arr.at(i) << std::endl;
}
Я нашел быстрое решение этой проблемы, проверив i-й элемент с помощью последний элемент массива, чтобы пропустить неназначенные элементы, но, очевидно, это не чистый ответ
for(size_t i {0}; i < m_arr.size(); i++) {
if(m_arr.at(i) != m_arr.back()) {
std::cout << m_arr.at(i) << std::endl;
}
}
Я считаю, что есть лучший способ l oop через этот массив и избежать ошибки. Заранее благодарю за помощь.