Microsoft Visual c++ Runtime Library: Debug assertion failed

di il
8 risposte

Microsoft Visual c++ Runtime Library: Debug assertion failed

Salve,

ho un programma in c su visual studio che fino a poco fa era funzionante sia a livello di compilazione che funzionale. Poco fa l'ho eseguito (tramite il prompt dei comandi) nuovamente e mi ha dato il problema come da titolo. Avete qualche idea su come risolvere?

8 Risposte

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

     Bisogna vedere il codice, ovviamente 

    Anche sapere cosa fa, quali parametri si attende e quali hai usato

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    E' una moltiplicazione fra matrici fondamentalmente:

    #include "prodotto.h"

    void leggi_file(char* file_name, struct matrice* dati) {
    int i; int j; FILE* fd;
    fd = fopen(file_name, "r");
    fscanf(fd, "%d", &dati->rig);
    fscanf(fd, "%d", &dati->col);
    dati->N = (float*)malloc(sizeof(float) * dati->rig * dati->col);
    for (i = 0; i < dati->rig; i++)
      for (j = 0; j < dati->col; j++)
     {
       {
         fscanf(fd, "%f", &dati->N[i * dati->col + j]);
      }
     }
    fclose(fd);
    }

    void stampa_valorisufile(char* file_name, struct matrice* dati) {
    FILE* fd; int i; int j;
    fd = fopen(file_name, "w");
    for (i = 0; i < dati->rig; i++) {
     for (j = 0; j < dati->col; j++) {
      fprintf(fd, "%f\t", dati->N[i * dati->col + j]);
     }
     fprintf(fd, "\n");
    }
    fclose(fd);
    }

    float prodotto(struct matrice* a, struct matrice* b, struct matrice* c, int gamma) {
    int i; int j; int k;
    c>rig = a->rig;
    c->col = b->col;
    c->N = (float*)malloc(sizeof(float) * c->rig * c->col);
    for (i = 0; i < c->rig; i++) {
     for (j = 0; j < c->col; j++) {
      c->N[i * c->col + j] = a->N[i * a->col] * b->N[j];
      for (k = 1; k < a->col; k++) {
       c->N[i * c->col + j] = c->N[i * c->col + j] + a->N[i * a->col + k] * b->N[k * b->col + j];
      }
     }
    }
    return 0;
    }

    int main()
    {

    struct matrice {
    int rig;
    int col;
    float* N;
    };
    struct matrice a, b, c;

    char filename_A[] = "matriceA.txt";
    char filename_B[] = "matriceB.txt";

    leggi_file(filename_A, &a);
    leggi_file(filename_B, &b);

    prodotto(&a, &b, &c);

    }

    Ho provato pure a disinstallare e reinstallare visual studio ma senza successo

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    Ho fatto qualche modifica al codice per compilarlo e direi che meccanicamente funziona, poi se i risultati siano corretti non ho controllato.

    Una cosa, consiglierei di controllare se i file siano davvero aperti e la memoria davvero allocata.

    //#include "prodotto.h"
    #include <stdlib.h>
    #include <stdio.h>
    
    struct matrice
    {
    int rig;
    int col;
    float* N;
    };
    
    void leggi_file(char* file_name, matrice *dati)
    {
     int i;
     int j;
     FILE* fd;
     fd = fopen(file_name, "r");
     if (fd)
      {
       fscanf(fd, "%d", &dati->rig);
       fscanf(fd, "%d", &dati->col);
       dati->N = (float*)malloc(sizeof(float) * dati->rig * dati->col);
       if (dati->N)
        {
         for (i = 0; i < dati->rig; i++)
          {
           for (j = 0; j < dati->col; j++)
            {
             fscanf(fd, "%f", &dati->N[i * dati->col + j]);
             printf("%f", dati->N[i * dati->col + j]);
    
            }
           printf("\n");
          }
    
         fclose(fd);
        }
      }
    }
    
    float prodotto(struct matrice* a, struct matrice* b, struct matrice* c)
    /* tolto il parametro gamma */
    {
     int i; int j; int k;
     c->rig = a->rig;
     c->col = b->col;
     c->N = (float*)malloc(sizeof(float) * c->rig * c->col);
     for (i = 0; i < c->rig; i++)
      {
       for (j = 0; j < c->col; j++)
        {
         c->N[i * c->col + j] = a->N[i * a->col] * b->N[j];
         for (k = 1; k < a->col; k++)
          {
           c->N[i * c->col + j] = c->N[i * c->col + j] + a->N[i * a->col + k] * b->N[k * b->col + j];
           printf("%3.1f ",c->N[i * c->col + j]);
          }
         printf("\n");
        }
    
      }
     return 0;
    }
    
    int main()
    {
    
    struct matrice a, b, c;
    
    char filename_A[] = "0.txt";
    char filename_B[] = "1.txt";
    
    leggi_file(filename_A, &a);
    leggi_file(filename_B, &b);
    
    prodotto(&a, &b, &c);
    
    }
  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    A parte le correzioni apportate, il messaggio “Debug assertion” può essere causato dal fatto che la open non trova i file.

    Assicurati che siano raggiungibili nella cartella dell'eseguibile oppure indica il percorso completo.

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    Grazie risolto! Me ne approfitto per un' altra domanda: se ho delle matrici molto grandi tipo 200 x 200 e le salvo su blocco note vedo che le sformatta poichè blocco note al massimo supporta 41 colonne. In questo caso qual è il modo migliore per leggere i file e farne il prodotto? 

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    Matrici di cosa?

    Blocco note non ha limiti di “41” colonne e comunque puoi usare Notepad++ o Word o altri programmi per leggere i dati.

    E poi che vuol dire “farne il prodotto”? Cosa c'entra il prodotto con la lettura dei dati su notepad?

    In ogni caso, crea una nuova discussione e non utilizzare questa. Proponi più chiaramente il problema e vediamo il codice che usi.

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    Giusto come nota:

    200 MILIONI x 200 MILIONI

    e' una matrice MOLTO grande

    200x200 e' un microbo, ma che dico un microbo, una cellula di un microbo ;-)

    200 MILA x 200 MILA e grandina, ma non piu' di tanto ;-) 

  • Re: Microsoft Visual c++ Runtime Library: Debug assertion failed

    @migliorabile …. una matrice 200 x 200 di strutture da 1 M l'una è una grande matrice.

    Sentiamo cosa risponde l'op.

Devi accedere o registrarti per scrivere nel forum
8 risposte