On a Solaris 5.8 machine, I have the following code:

**[non-working code]**

```
char *buf;
char *dir;
size_t psize;

psize = (size_t) 1024;
dir = getcwd(buf, psize);

```

On this unix machine, the above does **not** work and I get a segmentation fault when trying to run the program. It only works if I declare `dir` **before** `buf`:

**[working code]**

```
char *dir;
char *buf;
...
dir = getcwd(buf, psize);

```

When using another flavor of Unix, such as Mac OS X, I don't get any of these what seem to be very strict rules on how to write the code. Can anyone explain what's going on with the above example? Thanks!