Отговори на тема  [ 6 мнения ] 
Много странен проблем 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Много странен проблем
Къса ми нервите вече... :evil:
Значи постановката е следната (с опростен пример):


void func(unsigned char **v) {
if(v==NULL) return;
if(*v==NULL) {
.......
}
else {
.......
{
}

.............
.............

unsigned char *p=NULL;
func(&p);



Това парче код работи безупречно в Code Blocks, обаче с XC32 в 0.0001% от случаите води до ексепшън в тоя ред "if(*v==NULL)"
Мислех че може да има някакви проблеми с подравняване и слагах атрибути, обаче не помогна...

Някакви други идеи защо се получава така? #-o

_________________
'просто' е технически синоним на 'красиво'


Съб Мар 30, 2019 3:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: Много странен проблем
Н'бабане Гт'муан'га написа:
if(v==NULL) return;
if(*v==NULL) {
.......
}


Това не е атомична операция. Ако имаш конкуретна нишка/прекъсване се получават точно инфекциите за които говориш. Трябва ти критична секция или да замениш всичко с атомични операции.


Съб Мар 30, 2019 3:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Много странен проблем
miro_atc написа:
Н'бабане Гт'муан'га написа:
if(v==NULL) return;
if(*v==NULL) {
.......
}


Това не е атомична операция. Ако имаш конкуретна нишка/прекъсване се получават точно инфекциите за които говориш. Трябва ти критична секция или да замениш всичко с атомични операции.


Нямам конкурентни нишки и съм забранил прекъсванията

_________________
'просто' е технически синоним на 'красиво'


Съб Мар 30, 2019 3:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: Много странен проблем
А дебъгер нямаш ли? Или поне обработка на ексепщъните да видиш как е точно и откъде може да се получава. Вариантите са много, препълване на стека, мазане по паметта...
Не знам, очевидно стойността на v не е валиден адрес и като го ползваш като указател гърми.
Добре е все пак да видиш каква е стойността, така че евентуално да се сетиш откъде е дошла.


Съб Мар 30, 2019 4:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Много странен проблем
Едва ли е проста ситуацията... навярно не е точно така както си я написал тук...
Четеш нещо кеширано? ДМА?

_________________
main[-1u]={1};


Съб Мар 30, 2019 4:25 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Много странен проблем
В крайна сметка се оказа подравняване все пак... Защото по принцип в кода входът на функцията понякога е елемент от пакетирана структура. Махнах насилственото пакетиране и нещата заспаха

_________________
'просто' е технически синоним на 'красиво'


Съб Мар 30, 2019 7:01 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни