Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 17:22   #1
daniil_galahow
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 13
По умолчанию Как правильно получить ссылку на CArray.

Здравствуйте, почтенные коллеги.

Имею код примерно следующего вида:

Код:
function Foo(... ... LONG Count, LONG* Points)
{
    CArray<LONG> values; //массив, ранее заполненный значениями с помощью нескольких унаследованных функций. Имеет длину Count.
    const LONG* pData = NULL; //пойнтер, в который пишутся значения по ходу выполнения программы
    // ...
    pData=values.GetData();
    // ...
    memcpy(Points, pData, Count*sizeof(LONG)); //не знаю почему с помощью memcpy, но вот так. (Код унаследованный, потопталось на нём с десяток программистов)
}
При попытке переделать в такой вид:
Код:
function Foo(... ... LONG Count, LONG* Points)
{
    std::vector<LONG> values; //вектор, ранее заполненный значениями с помощью нескольких моих функций. Имеет длину Count.
    const LONG* pData = NULL; 
    // ...
    pData=values.data();
    // ...
    memcpy(Points, pData, Count*sizeof(LONG));
}
машинюка, на строчке memcpy(... ... ...) кидает unhandled exception "System.AccessViolationExceptio n" (Attempted to read or write protected memory or memory is corrupt)

Что я не так делаю, и как надо правильно получать ссылку на std::vector?

UPD: Модераторы, пожалуйста, переименуйте тему на "Как правильно получить ссылку на std::vector?"

Последний раз редактировалось daniil_galahow; 10.04.2014 в 17:30.
daniil_galahow вне форума Ответить с цитированием
Старый 11.04.2014, 14:04   #2
daniil_galahow
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 13
По умолчанию

Как показала практика, решить вопрос можно простым
Код:
Points=values.data();
без применения memcpy.

Проблема оказалась в другом - методы в других классах, которые пережевывают значения дальше, написаны криво и дают многочисленные глюки.

Вывод: унаследованный код - это очень тяжело.
daniil_galahow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить ссылку открытой страницы Evgeniy77 Мобильные ОС (Android, iOS, Windows Phone) 0 25.02.2014 15:40
Как правильно указать ссылку формат ячейки чтобы функция работала? Brucebelg Microsoft Office Excel 7 21.05.2010 10:19
Как правильно передать через ссылку двумерный динамический массив? amerhant Общие вопросы C/C++ 2 21.04.2010 23:50
Как получить ссылку на файл с файлообенника? S(p)@wN Работа с сетью в Delphi 0 16.08.2007 15:20