У меня есть две структуры: первая содержит данные в массиве и в векторе; второй предоставляет доступ к указателям на эти данные как 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]