в чем причина моего кода? необработанное исключение - PullRequest
0 голосов
/ 10 июля 2010

Источник отладки: http://www.cppblog.com/Files/mymsdn/cvector-bug-vs2008-201007101651.zip

Привет всем, я исправил свой код, спасибо за помощь! Вы можете скачать правильную версию моего кода.

Источник: http://www.cppblog.com/Files/mymsdn/cvector-vs2008-20100710.rar

Я пытаюсь написать версию вектора на языке Си. Я использую void ** a pRoot для обозначения вектора указателя. Я хочу, чтобы void ** p был доступен, а потом я выделяю память.

как это: cvector_ptr_ptr = &cvector_ptr;

Я передаю cvector_ptr_ptr каждой функции, чтобы справиться с ней.

В моем коде я столкнулся с необработанным исключением. Я думаю, что я прочитал переполнение. Но в функции "insert" я могу использовать (*cvector_ptr_ptr)->element_size, чтобы получить значение размера. Я передаю cvector_ptr_ptr в функцию "insert_copy" Я не могу использовать тот же код [(*cvector_ptr_ptr)->element_size], чтобы получить значение.

Что со мной не так?

Ответы [ 2 ]

1 голос
/ 10 июля 2010

Проблема в вашей функции "create_vector_n", там:

cvector_ptr_ptr = &cvector_ptr;
return cvector_ptr_ptr;

Вы возвращаете указатель на переменную стека (cvector_ptr), что ужасно неправильно.

0 голосов
/ 10 июля 2010

Я думаю, что в вашем коде много проблем, одна проблема, которая действительно очевидна, это

offset = ((*cvector_ptr_ptr)->count + 1) * element_size;
                                    ^^^
                            this is the problem

Первый добавляемый элемент должен быть записан с нулевым смещением, а не element_size.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...