Вопрос номер 1.
В ходе дебага одной софтины
столкнулся с такой ситуацией:
выполняю программу пошагово
и вижу такое
if(SomeFunc()){
printf("mega error");
}
else{
printf("all OK");
}
трейсинг SomeFunc
показывает что она возвращает -1
то бишь по коду мы должны попадать
на printf("mega error"); однако,
попадаем на printf("all OK");
баг проявляеться после пары недель работы
проги, я предпологаю что баг вызван какимто
хитрым повреждением стека, возможно просто
не достали со стека переменную какую-то,
(в проге широко используються функции с переменным
количеством операндов) или еще что
однако прога продолжает работать, неверно работать
а мне как-то нужно найти баг.
Хотелось бы услышать советы людей которые
сталкивались с подобными ситуациями,
а также советы на тему, как мне этот баг выловить.
Вопрос номер 2.
Есть код типа
Func1(){
...
Func2(){
pid = fork();
if(pid == 0){
long_time_func();
}
}
}
в общем куча функций вложеных одна в другую
в каждой создаеться на стеке куча автоматических переменных
что естественно занимает определенную память
софтина критична к объему потребляемой памяти
поэтому чтобы в форке освободить эту память на стеке
я делаю такой код
if(PROC_TYPE == LONG_PROC) return;
и так до самого майна
в котором уже делаю непосредственный вызов
нужной функции
main{
....
if(PROC_TYPE == LONG_PROC) some_func();
}
Вопрос состоит в том есть ли какой-то другой
более элегантный способ освобождения стека ?
Похожие темы
- Форум стек (2020)
- Форум кончается стек (2013)
- Форум Стек, форвардинг (2017)
- Форум Стек технологий (2015)
- Форум полиморфный стек (2015)
- Форум Караван стека (2008)
- Форум Размер стека (2005)
- Форум WINEX + стек (2003)
- Форум WINEX + стек (2003)
- Форум Стек TCP (2000)