Наукатическое редактирование: Этот вопрос вместо этого о std :: вектор (определенный внутри функции), который вышел из области, но указатель на его первый элемент был возвращен через std :: ecector.data (). Попытка использовать данные, указанные возвращенным указателем, в конечном итоге в конечном итоге в поврежденных данных, поскольку данные внутри std :: вектор уже вышли из строя и освобождены. Например ,:
...
type *ptr;
type* function1(){
std::vector vector;
return vector.data();
}
ptr = function1();
// ptr points to corrupt data here
...
Решение на Topic: « способ », написанное ниже, является решением, но он на мгновение дублирует данные. Еще одна вещь, которую можно было бы сделать, например:
...
std::vector vect;
void function1(std::vector &vector){
// Add data to vector
}
// Use the data inside vector
type *ptr = vect.data();
...
Старый вопрос ... Контекст контекста : я пишу этот двигатель, где я храню позицию, нормальную, вершину и индексы в классе сетки. Я использую динамические массивы необходимых типов OpenGL, точно так же: < /p>
class Mesh(){
...
GLfloat *vertices;
GLubyte *indices;
...
}
< /code>
Я разработал куб с ручкой и бумагой, с его вершинами, координатами текстуры, нормами и индексами, а затем заполнил мои динамические массивы этими данными (скопировал их вручную :: Скопируйте его в динамические массивы после правильного распределения памяти (используя новый BTW). Это работало как чар....
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
...
glVertexPointer(3, GL_FLOAT, 0, meshInst->pos_coords);
glTexCoordPointer(2, GL_FLOAT, 0, meshInst->tex_coords);
...
glDrawElements(
GL_TRIANGLES, (CORRECT index count), GL_UNSIGNED_BYTE,
meshInst->indices
);
...
THE CONTEXT:
I created another constructor for Mesh, which instead of copying the data to newly allocated memory from an array of GLfloat, GLubyte, etc. (which worked like a charm I might repeat), it does the following:
1)Loads data (which was Тщательно протестированные для правильного импорта ) из файла в std :: vector положения , std :: vector ind и т. Д.
2) Я попробовал два способа передачи данных в мои динамические массивы, чтобы быть выброшенными на OpenGL, способ и путь b:
Вопрос в том ... почему? Как указано в http://www.cplusplus.com/reference/vector/vector/data/. Кроме того, если я сравню данные, указанные «вершинами» и «индексами», это буквально идентично. Сравните оба отпечатки данных для себя. Они оба напечатаны с использованием хранимой длины и динамическими указателями массива сразу после загрузки.>
[b] Наукатическое редактирование: [/b] Этот вопрос вместо этого о std :: вектор (определенный внутри функции), который вышел из области, но указатель на его первый элемент был возвращен через std :: ecector.data (). Попытка использовать данные, указанные возвращенным указателем, в конечном итоге в конечном итоге в поврежденных данных, поскольку данные внутри std :: вектор уже вышли из строя и освобождены. Например ,: [code]... type *ptr; type* function1(){ std::vector vector; return vector.data(); } ptr = function1(); // ptr points to corrupt data here ... [/code] [b] Решение на Topic: [/b] «[b] способ [/b]», написанное ниже, является решением, но он на мгновение дублирует данные. Еще одна вещь, которую можно было бы сделать, например:[code]... std::vector vect; void function1(std::vector &vector){ // Add data to vector } // Use the data inside vector type *ptr = vect.data(); ... [/code] [b] Старый вопрос [/b] ... [b] Контекст контекста [/b]: я пишу этот двигатель, где я храню позицию, нормальную, вершину и индексы в классе сетки. Я использую динамические массивы необходимых типов OpenGL, точно так же: < /p> [code]class Mesh(){ ... GLfloat *vertices; GLubyte *indices; ... } < /code> Я разработал куб с ручкой и бумагой, с его вершинами, координатами текстуры, нормами и индексами, а затем заполнил мои динамические массивы этими данными (скопировал их вручную :: Скопируйте его в динамические массивы после правильного распределения памяти (используя новый BTW). Это работало как чар.... glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); ... glVertexPointer(3, GL_FLOAT, 0, meshInst->pos_coords); glTexCoordPointer(2, GL_FLOAT, 0, meshInst->tex_coords); ... glDrawElements( GL_TRIANGLES, (CORRECT index count), GL_UNSIGNED_BYTE, meshInst->indices ); ... [/code] [b]THE CONTEXT[/b]: I created another constructor for Mesh, which instead of copying the data to newly allocated memory from an array of GLfloat, GLubyte, etc. ([b]which worked like a charm I might repeat[/b]), it does the following:
1)Loads data ([b]which was Тщательно протестированные для правильного импорта [/b] ) из файла в std :: vector положения , std :: vector ind и т. Д.
2) Я попробовал два способа передачи данных в мои динамические массивы, чтобы быть выброшенными на OpenGL, способ и путь b:
способ a: < /strong> < /p> [code]std::copy(positions.begin(), positions.end(), vertices); std::copy(inds.begin(), inds.end(), indices); < /code> Результат: < /strong> работает отлично, как в первом конструкторе
Вопрос в том ... почему? Как указано в http://www.cplusplus.com/reference/vector/vector/data/. Кроме того, если я сравню данные, указанные «вершинами» и «индексами», это буквально идентично. Сравните оба отпечатки данных для себя. Они оба напечатаны с использованием хранимой длины и динамическими указателями массива сразу после загрузки.>
Могу ли я использовать указатель, возвращаемый std :: vector :: data () :: data () в качестве указателя, возвращаемого эквивалентным std :: vector :: data () ? Безопасно?
>> cat dummy.cpp
#include
#include
#include
#include
Могу ли я использовать указатель, возвращаемый std :: vector :: data () :: data () в качестве указателя, возвращаемого эквивалентным std :: vector :: data () ? Безопасно? #include
#include
#include
#include
Могу ли я использовать указатель, возвращаемый std :: vector :: data () :: data () в качестве указателя, возвращаемого эквивалентным std :: vector :: data () ? Безопасно? #include
#include
#include
#include
Могу ли я использовать указатель, возвращаемый std :: vector :: data () :: data () в качестве указателя, возвращаемого эквивалентным std :: vector :: data () ? Безопасно? #include
#include
#include
#include
У меня есть файл JSON, который содержит вопросы и ответы с несколькими вариантами выбора, но многие из символов повреждены или заменены странными символами Unicode, такими как , , и т. Д. Например:
{
«Вопрос»: «Что из h neleyg-это u...