I have the following code, the arrays are global variables.

#define MEMORY 64000;
#define NUMFRAMES 6400;

int mem[MEMORY];
int frames[NUMFRAMES];

I was pretty sure this should work as I don't see why it shouldn't but I am getting "parse error before ';' token" for both array declarations.
Although if I declare the arrays using 64000 instead of MEMORY it works.

It's best to think of the preprocessor as a completely different language than C. In particular, #define statements do not generally end with a semicolon because the semicolon is considered to be a part of the replacement text. This is what your compiler sees:

int mem[64000;];
int frames[6400;];

At which point the error is easy to locate.