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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2015, 11:05   #21
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Цитата:
Т.е. вы показали нам как выделяете массив Weapon а потом жалуетесь, что валится при работе с массивом newindeces и от нас требуется догадаться в чем проблема?
Я просто показал что не использую рекурсию и вылетает у меня в самых разных местах.

Цитата:
Подсказка - наличие typecast свидетельствует о проблеме.
Если вы об этом
Код:
os.write((char *) &newindeces[i].ind.front(), sizeof(int) * newindeces[i].ind.size());
То тут всё правильно. Данные в файл записываются байтами.
gunsoy вне форума Ответить с цитированием
Старый 15.07.2015, 11:45   #22
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Я не понял, в этой строке все правильно или вылетает?
waleri вне форума Ответить с цитированием
Старый 15.07.2015, 16:47   #23
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

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

Код:
    unsigned char *AddrArray1 = new unsigned char[10];
    unsigned char *AddrArray2 = new unsigned char[10];
    for(int i=0;i<9;i++){
        AddrArray1[i]='1';
        AddrArray2[i]='2';
    }
    AddrArray1[9]=0;
    AddrArray2[9]=0;
    //  AddrArray1  = "111111111"
    //  AddrArray2  = "222222222"

    for(int i=0;i<30;i++){
        AddrArray1[i] = '3';
    }
    AddrArray1[9] = 0;
    AddrArray2[9] = 0;
    //  AddrArray1  = "333333333"
    //  AddrArray2  = "333333222"
В данном случае промежуток между AddrArray1 и AddrArray2 в памяти составил 14 байт. И самое главное, это то, что после этого программа продолжила нормально работать.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 15.07.2015 в 17:11.
Krasiosoft вне форума Ответить с цитированием
Старый 15.07.2015, 17:30   #24
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Нашёл структуру в которой был массив из милиона инт, сама структура была объявлена в файле который никаким боком к ней не относится (написана года 2 назад, только начинал изучение с++). Надо мне было сразу все файлы просмотреть. Видать мне было лень выделять память динамически и я придумал такой способ экономии времени=)

Теперь всё работает. Всем спасибо за помощь.
gunsoy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Памяти VladimirAvakov Общие вопросы C/C++ 0 28.05.2014 23:01
Задача-найти объем оперативной памяти по шестнадцатеричному адресу последнего байта оперативной памяти Ksana Alex Помощь студентам 4 14.11.2013 15:51
Распределение памяти. Динамическое выделение памяти с++ Tolian92 Помощь студентам 8 14.05.2012 21:44
Программа для тестирования памяти, тестирование ячеек памяти Hunter557 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 30.01.2011 19:20
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16