Позвольте быть этим C-файлом:
#include <stdio.h>
#include <signal.h>
void handle(){
return;
}
int main() {
struct sigaction action;
action.sa_handler = &handle;
printf("%d\n", action.sa_flags);
return 0;
}
Компиляция с gcc-7 (Ubuntu 7.4.0-1ubuntu1 ~ 18.04.1) выдает предупреждение:
src/flags.c:14:2: warning: ‘action.sa_flags’ is used uninitialized in this function [-Wuninitialized]
printf("%d\n", action.sa_flags);
Однако,с gcc-5 (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.11) без предупреждения.
С gcc-7 значение sa_flags
действительно не инициализировано:
(gdb) x action.sa_flags
0x555545a0: Cannot access memory at address 0x555545a0
где с gcc-5 он получает странное значение:
(gdb) x action.sa_flags
0x4004a0 <_start>: 0x8949ed31
Я не понимаю, почему:
- с gcc-7,
sa_flags
не инициализируются в 0. - с gcc-5,
sa_flags
и функцией _start
имеют одинаковые адреса.