问题一:
报错信息:

1、肯定是发生了越界。建议改成这样:
for (int i = 0; i < n /* arlength(a1)*/; i++)
{
int sign = 0;
for (int k = 0; k < n/* arlength(a1)*/; k++)
{
for (int j = 0; j < alength(a, i) && i != k; j++)
{
2、arlength这个获取长度方式也有问题,里面必然会导致越界问题。而a1就是通过new int[n]动态创建的,因此a1长度已知的,直接使用n即可。
3、如果是想获取'a1中有效元素的长度,那么arlength(a1)还应该传入a1`数组的长度,for循环条件要加上k小于数组长度,a1之类的也最好初始化为其他整数,方便判断。