2016-07-09 11 views
-1

Ich habe versucht, dieses Problem zu lösen, aber diese Nachricht erschien nach Abschluss der ersten Testfall Schleife, und wenn ich es Codeforces hochgeladen es ein Laufzeitfehler Urteil bekommt!dynamisch zugewiesene 2D-Array Laufzeitfehler

Gegeben 2D Array von ganzen Zahlen der Größe N * N. Drucke die Summe der perfekten Quadratzahlen.

Zum Beispiel sind 25, 16, 36 und 9 perfekte Quadratzahlen. Aber 35, 17, 23 und 11 sind nicht.

Eingang
Ihre Eingabe besteht aus T (1 ≤ T ≤ 10^2) Testfällen. Jeder Testfall enthält nur 1 ganze Zahlen N (1 ≤ N ≤ 10^2). N Zeilen folgen jeder Zeile enthält N Leerzeichen getrennt ganze Zahlen (1 ≤ Nij ≤ 10^2).

Ausgabe
Für jeden Testfall drucken Sie eine einzelne ganze Zahl in einer einzigen Zeile, die erforderliche Summe.

Beispiel Eingangs

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

output:

9 
158 

Code:

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++

Update: frei (z [i]) wurde bearbeitet, frei zu sein (z [j])

Update: Danke für jpw es funktionierte gut in VS, aber dieses Mal führte Kompilierungsfehler in Codeforces statt Runtime-Fehler.

+1

[Bitte sehen Sie diese Diskussion darüber, warum nicht zu werfen seine free(z[j]);

ändern, die es gut laufen macht der Rückgabewert von 'malloc()' und Familie in 'C'.] (http://stackoverflow.com/q/605845/2173917). –

+0

Welchen Kompilierungsfehler bekommst du? –

+0

Datei kann nicht kompiliert werden: program.cpp (25): Fehler C2668: 'sqrt': mehrdeutiger Aufruf der überladenen Funktion es könnte 'long double sqrt (long double)' oder float sqrt (float) 'oder sein 'double sqrt (double)' beim Versuch, die Argumentliste abzugleichen '(int)' –

Antwort

1

Es scheint ein einfacher Tippfehler ... am Ende

free(z[i]); sein sollte in ideone

+1

Vielen Dank :) Ich weiß nicht, wie ich das verpassen könnte! danke nochmal :) edit: und dein Edit war perfekt. –

+0

es funktionierte gut in VS, aber dieses Mal führte Kompilierung Fehler in Codeforces eher als Laufzeitfehler –

+0

@MohamedFathy Ich kann Ihnen nicht sagen, warum das ist. Nehmen Sie die relevanten Header und so weiter? – jpw