Неопределенное значение векторного элемента, к которому обращается указательC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неопределенное значение векторного элемента, к которому обращается указатель

Сообщение Anonymous »

Проблема
У меня есть две структуры: первая содержит данные в массиве и в векторе; второй предоставляет доступ к указателям на эти данные как pArr = &array[0] или pVec = &vector[0]. Далее я могу получить различные значения pVec[0] в зависимости от того, как pVec был создан. Однако pArr всегда работает должным образом.
Код для воспроизведения
Я использую Visual Studio 2017.

Код: Выделить всё

#include 
#include 

struct InnerClass {

InnerClass(int _n) : n(_n) {
arr = new int[n];
for (int i{ 0 }; i < n; ++i) {
vec.push_back(i);
arr[i] = i;
}
}

const int* get_pointer_to_vector_begining() const {
return &vec[0];
}

const int* get_pointer_to_array_begining() const {
return &arr[0];
}

int n;
int* arr;
std::vector vec;
};

struct OuterClass {

int n;
InnerClass* inner;

OuterClass(int _n) : n(_n) {
inner = new InnerClass(n);
}

const int* get_vector_of_member() const {
return inner->get_pointer_to_vector_begining();
}

const int* get_array_of_member() const {
return inner->get_pointer_to_array_begining();
}

const int* get_vector_of_new_object() const {
//const InnerClass* sub = new InnerClass(n);
const InnerClass& sub(n);// = new InnerClass(n);
return sub.get_pointer_to_vector_begining();
}

const int* get_array_of_new_object() const {
const InnerClass& sub(n);
return sub.get_pointer_to_array_begining();
}

const int* get_vector_of_new_object_by_pointer() const {
const InnerClass* sub = new InnerClass(n);
return sub->get_pointer_to_vector_begining();
}

const int* get_array_of_new_object_by_pointer() const {
const InnerClass* sub = new InnerClass(n);
return sub->get_pointer_to_array_begining();
}
};

int main() {

OuterClass mc(10);

const int *pArrMember = mc.get_array_of_member();
const int *pVecMember = mc.get_vector_of_member();
const int *pArrNewObject = mc.get_array_of_new_object();
const int *pVecNewObject = mc.get_vector_of_new_object();
const int *pArrNewObjectByPointer = mc.get_array_of_new_object_by_pointer();
const int *pVecNewObjectByPointer = mc.get_vector_of_new_object_by_pointer();

int i = 1;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79242745/undetermined-value-of-vector-element-accessed-by-pointer[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»