繁体   English   中英

动态分配的二维数组运行时错误

[英]dynamically allocated 2D array Runtime error

我试图解决这个问题,但是在完成第一个测试用例循环后出现了这条消息,当我将它上传到 codeforces 时,它得到了运行时错误判决!

给定大小为 N*N 的二维整数数组。 打印完全平方数的总和。

例如,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;}

我在 VSc++ 上调试时收到的消息图像

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

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

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

free(z[i]); 最后应该是free(z[j]);

更改使其在ideone 中运行良好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM