Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Повреждение локальной памяти при параллельном программировании / 10 сообщений из 10, страница 1 из 1
08.05.2015, 12:46
    #38954518
antake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
Доброго дня!

Описываю проблему:
Параллельно работают несолько потоков по схеме master-slaves.
Внутри потока на стеке создается матрица 15*15, инициализируется нулями. Назовем ее A. Потом к этой матрице прибавляются другие матрицы. После всего A вдруг оказывается заполнена значениями в стиле 4e+173, т.е. как будто не инициализирована.
Пробовал создать дебажную переменную, куда сохранить A сразу после ее инициализации. Дебажная матрица оказывается набита очень похожим мусором, но чуток отличающимся. Как будто A изначально не инициализировалась нулями, а потом к ней добавлялись значения, маленькие по сравнению с 4e+173.

Ошибка возникает редко. Малейшее изменение в коде (вставить printf) может убрать ошибку или заметно увеличить частоту.

Не могу вставить код, т.к. самые подозрительные на ошибки места - матрица, параллельность написаны на внутреннем фреймворке. При этом проект болшой и работает давно - едва ли в реализации матрицы и параллельности есть грубые ошибки.

Прошу поделиться опытом или подсказать, откуда вообще такая ошибка может взяться.
...
Рейтинг: 0 / 0
08.05.2015, 12:50
    #38954524
antake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
Забыл уточнить: компилятор - Visual Studio 2013
...
Рейтинг: 0 / 0
08.05.2015, 12:58
    #38954538
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
Доступ к матрице из разных потоков как-то синхронизируется? (mutex, event и т.п.)
...
Рейтинг: 0 / 0
08.05.2015, 13:11
    #38954558
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
antakeПрошу поделиться опытом или подсказать, откуда вообще такая ошибка может
взяться.
Это поведение типично для обращения к уже освобождённой памяти. DrMemory, кажется,
способен ловить такие ошибки. Используй его.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.05.2015, 16:27
    #38954812
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
antakeНе могу вставить код, т.к. самые подозрительные на ошибки места - матрица, параллельность написаны на внутреннем фреймворке.
Так давайте код без фреймворка.
Нам все равно смотреть, а не компилировать ))
...
Рейтинг: 0 / 0
08.05.2015, 16:31
    #38954816
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
Моя версия - в поток передается адрес локальной переменной чтобы он заполнил ее данными, и время жизни потока больше времени жизни этой переменной, поэтому когда та же память используется для других переменных, поток продолжает писать туда данные которые не соответствуют типу.
...
Рейтинг: 0 / 0
08.05.2015, 20:03
    #38955032
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
Автор пишет
Не могу вставить код, т.к. самые подозрительные на ошибки места - матрица, параллельность написаны на внутреннем фреймворке. При этом проект болшой и работает давно - едва ли в реализации матрицы и параллельности есть грубые ошибки.
Во первых надо разобраться что это за фреймворк? Какие у него API.
Что там с мультипоточностью? Методы потокобезопасны или нет?
...
Рейтинг: 0 / 0
09.05.2015, 05:51
    #38955131
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
antake
Прошу поделиться опытом или подсказать, откуда вообще такая ошибка может взяться.

это ошибка в программе!
без длительного анализа кода разговор бессмысленный.
А возможно и с анализом бессмысленный, придется очень долго сидеть в отладке .

рекомендую для начала воспользоваться любыми анализаторами кода, статическими или типа valgrind/oprofile.
из статич. есть PVS studio, недавно даже у нас тут дали на него ссылку.
...
Рейтинг: 0 / 0
09.05.2015, 05:57
    #38955132
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
MasterZiv,

www.viva64.com/ru/pvs-studio/
...
Рейтинг: 0 / 0
10.05.2015, 22:33
    #38955508
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повреждение локальной памяти при параллельном программировании
antakeДоброго дня!

Описываю проблему:
Параллельно работают несолько потоков по схеме master-slaves.
Внутри потока на стеке создается матрица 15*15,


Потоки лазят в стеки других потоков, а
время жизни стековых переменных одного потока никак
не контролируется в соседних потоках.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Повреждение локальной памяти при параллельном программировании / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]