动态分配2D数组运行时错误

时间:2016-07-09 14:53:38

标签: c multidimensional-array dynamic-allocation

我试图解决这个问题,但在完成第一个测试用例循环后出现此消息,当我将其上传到代码强制时,它会得到运行时错误判定!

给定大小为N * N的2D整数数组。打印完美平方数的总和。

例如,25,16,36和9是完美的方形数字。但35,17,23和11不是。

输入
您的输入包含T(1≤T≤10^ 2)测试用例。每个测试用例仅包含1个整数N(1≤N≤10^ 2)。每行后面有N行包含N个空格分隔的整数(1≤Nij≤10^ 2)。

输出
对于每个测试用例,在一行中打印一个整数,即所需的总和。

示例输入

2
2
9 97
8 56
3
1 18 6
16 42 100
25 16 17

输出:

9
158

代码:

void main()
{
int n, x, **z, m, i, j, q, p, sum;
float y;

scanf("%d", &x);
for (i = 0; i < x; i++)
{
    sum = 0;
    scanf("%d", &n);
    z = (int**)malloc(sizeof(int*)*n);
    for (j = 0; j < n; j++)
        z[j] = (int*)malloc(sizeof(int)*n);
    for (p = 0; p < n; p++)
        for (q = 0; q < n; q++)
        {
            scanf("%d", &z[p][q]);
            m = sqrt(z[p][q]);
            y = sqrt(z[p][q]) - m;
            if ((y) == 0)
                sum += z[p][q];
        }
    printf("%d\n", sum);
    for (j = 0; j < n; j++)
        free(z[i]);
    free(z);
}
return;}

image of message i get when i debug on VSc++

更新:free(z [i])被编辑为免费(z [j])

更新:感谢jpw它在VS中运行良好,但这次导致Codeforces中的编译错误而不是运行时错误。

1 个答案:

答案 0 :(得分:1)

这似乎是一个简单的错字......

最后的

free(z[i]);应为free(z[j]);

更改它使其在ideone

中正常运行