よくわからないバグがあります。
このコードでは、p の値はプログラムからのアドレスである必要があります。
static struct ProgramList{
struct Program *program;
struct ProgramList *next;
} programs = {NULL, NULL};
struct ProgramList *p = &programs;
...それだけではありません。p のアドレスは 0x0097c130 で、プログラムのアドレスは 0x0097c144 です。
何をすべきか?
編集: Microsoft Visual Studio で作業しています。デバッガーのウォッチ機能でアドレスを確認しています。p と &programs をチェックしています。Edit2: p のアドレスは 0x0040f89c です。アドレスではなく p の値を探していることはわかっています。