Large array in C18 causes device reset
There is no inherent reason this array should cause a reset.  You are apparently declaring 2 kBytes of constants in program memory.  That PIC has 8 kBytes of program memory, so that should be OK.

More likely, there is a bug elsewhere.  This array is probably the largest thing the linker has to place, so all the code not at specific fixed addresses will likely move around as the array size is changed, which can make some bugs appear and disappear.

It might be useful to show the "Section Info" part of the linker MAP file so we can see what ended up where.  Also, try stepping thru this with the simulator and see if you end up executing unintended locations or something.

Added:

From the "rom" keyword, you obviously intended this array to be in program memory.  Make really sure the C compiler understood this correctly.  I use C18 infrequently and don't remember what the correct incantations are to define constants in program memory.  If the compiler didn't put it there, all manner of strange things could happen.  Again, the linker map file would clear this up.

Added 2:

Now that we have a linker map file, we can see the problem.  1024 words of 16 bits each is 2048 bytes, which is 800h.  There is only one section anywhere near that size, and it is exactly 800h bytes, so the compiler did understand to put it in program memory.  However, note that it is placed at address 8.  That is the single or high priority interrupt vector address.  This array also overlaps the low priority interrupt address at 16, so either way interrupts can't be used with where this array got placed.

The fact that the linker placed the array where it did means that nothing else was claiming the fixed address of either interrupt vector.  I don't use C for interrupt routines, but this tells me that the C compiler doesn't understand that your interrupt routine actually is a interrupt routine, or it wasn't included in the link.

I don't know what you called the interrupt routine module, but is it listed at all in the link map?  If so, then you forgot to mutter the correct incantation so that the compiler knows its a interrupt routine and thereby force it to a particular address.  If not, then it isn't being inluded in the link somehow.  This can happen if you put all the object files in a library so the linker can pick what it wants and there are no missing externals to the interrupt module.  That can happen with a interrupt module since it is never called explicitly.  In that case the interrupt module object file must be given to the linker explicitly.