typedef struct aa{
char name[32];
}SMP;
は型の宣言で定義ではないからメモリの割当ては行われない。

SMP *foo
の宣言(これは定義でもある)はポインタ分のメモリ割り当てしかしない
バイトアドレスが4バイトの処理系なら4バイト割当てられる。
自動変数だから初期値はゴミ

fooの参照先は >>137のように明示的にメモリ割当てを行わなければならない。