Как уже кратко прокомментировал @ForceBru, это проблема с int list[param2];
Когда список объявляется так, буфер сохраняется в стеке, распределение происходит просто компилятором, увеличивая указатель стека на сумма param2.
Если это скомпилировано с j, выделенным после буфера, что может быть здесь, компьютер получит доступ к расположению stack_pointer + param2 * sizeof(int) + sizeof(int)
для хранения 0 (j = 0).
Стек ограничен, отсюда и название этого сайта, когда к буферу, находящемуся за пределами стека, осуществляется доступ, ядро просто увидит, что вы пишете где-то очень далеко от любой законной памяти, и предположит, что что-то пошло не так.
Для больших буферов взгляните на mallo c.