2016-07-09 2 views
-1

J'essayais de résoudre ce problème, mais ce message est apparu après avoir terminé la première boucle de test, et quand je l'ai téléchargé sur codeforces, il obtient un verdict d'erreur d'exécution!Erreur d'exécution du tableau 2D allouée dynamiquement

Étant donné 2D Tableau d'entiers de taille N * N. Imprime la somme des nombres carrés parfaits.

Par exemple, 25, 16, 36 et 9 sont des nombres carrés parfaits. Mais 35, 17, 23 et 11 ne le sont pas.

Entrée
Votre entrée est composée de tests T (1 ≤ T ≤ 10^2). Chaque cas de test contient seulement 1 entiers N (1 ≤ N ≤ 10^2). N lignes suivent chaque ligne contient N entiers séparés par des espaces (1 ≤ Nij ≤ 10^2).

Sortie
Pour chaque test, imprimez un seul entier sur une seule ligne, la somme requise.

entrée de l'exemple

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

sortie:

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: libre (z [i]) a été modifié pour être libre (z [j])

Mise à jour: merci pour jpw cela a bien fonctionné dans VS, mais cette fois a entraîné une erreur de compilation dans Codeforces plutôt qu'une erreur d'exécution.

+1

[S'il vous plaît voir cette discussion sur les raisons de ne pas jeter la valeur de retour de 'malloc()' et de la famille dans 'C'.] (http://stackoverflow.com/q/605845/2173917). –

+0

Quelle erreur de compilation obtenez-vous? –

+0

Impossible de compiler le fichier: program.cpp (25): erreur C2668: 'sqrt': appel ambigu à la fonction surchargée il pourrait être 'long double sqrt (long double)', ou float sqrt (float) ', ou 'double sqrt (double)' en essayant de faire correspondre la liste d'arguments '(int)' –

Répondre

1

Il semble être une simple faute de frappe ...

free(z[i]); à la fin devrait être free(z[j]);

Changing qui fait tourner bien dans ideone

+1

Merci beaucoup :) Je ne sais pas comment je pourrais manquer ça! merci encore :) éditer: et votre édition était parfait. –

+0

cela a bien fonctionné dans VS, mais cette fois a entraîné une erreur de compilation dans Codeforces plutôt que l'erreur d'exécution –

+0

@MohamedFathy Je ne peux pas vous dire pourquoi c'est. Incluez-vous les en-têtes pertinents et ainsi de suite? – jpw