Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Assertion failure

  1. #1

    [C] assertion failure

    ciao a tutti.
    nell'esecuzione del mio programma, mi si presenta errore di assertion failure solo in corrispondenza di alcuni file sorgente (che superano una certa dimensione).
    la mia domanda è la seguente: può questo errore essere determinato da una memoria insufficiente del mio pc?
    spero che qualcuno possa aiutarmi

  2. #2
    Non credo ke dipenda da questo

    almeno ke tu non utilizzi un ambiente complesso (C++Builder, Visual Studio, etc) e con un vecchio pc.
    Il dubbio non è piacevole, ma la certezza è ridicola. Solo gli imbecilli son sicuri di ciò che dicono.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quale e' l'esatto messaggio?

  4. #4
    ho identificato l'errore (debug assertion failed...)in corrispondenza di una deallocazione di un puntatore (l'ambiente è visual studio 6).
    ho provato a commentarla e il programma esegue senza problemi.
    mi chiedo perchè questo errore viene segnalato solo se leggo determinati file sorgente.
    thanks

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A questo punto e' necessario che tu mostri il codice ...

  6. #6
    la funzione in cui si verifica l'errore è la seguente:
    le deallocazioni di cui parlavo prima sono quelle in calce al programma.


    codice:
    // calculate_routing: Calculate the minimum path for each couple of source-destination nodes
    void calculate_routing(NETINFO_PTR netinfo_ptr, LISTNODEPTR adiacence_array, PATH* routing_array, 
    					   LISTNODEPTR path_array, STATENODE** nodeinfo_mtx) 
    {
      int i, j, num, back;
      enum stop_condition {TRUE, FALSE} stop;
    
      LISTNODEPTR current = malloc(sizeof(LISTNODE));
      LISTNODEPTR swapptr = malloc(sizeof(LISTNODE));
      LISTNODEPTR cur_adiacence = malloc(sizeof(LISTNODE));
      LISTNODEPTR actual_list = malloc(sizeof(LISTNODE));
    
      current = NULL; 
      cur_adiacence = NULL;
      stop = FALSE;
    
      actual_list = listnode_init();
            
      swapptr = listnode_init();
    
      //-- nodes initialization ---------------------
      for (i = 0; i <= netinfo_ptr->size->COUPLE_NUM - 1; i++) 
      {  
    	for(j = 0; j <= netinfo_ptr->size->NNODES - 1; j++)
    	 {
          nodeinfo_mtx[j][i].predecessor = INIT_PRED;
    	  nodeinfo_mtx[j][i].precedent = INIT_PRED;
    	  if(j == routing_array[i].source)
    	  {
    	    nodeinfo_mtx[j][i].hop_number = 0;
    	    nodeinfo_mtx[j][i].label = permanent;
    	  }
    	  else
    	  {
    		nodeinfo_mtx[j][i].hop_number = INFINITY;
    	    nodeinfo_mtx[j][i].label = tentative;
    	  }
    	 }
        routing_array[i].length = 0;
        listnode_insert(actual_list, routing_array[i].source);
        listnode_insert(&path_array[i], routing_array[i].source); 
        
        num = 0;
    
        while (stop != TRUE) 
    	{
          current = actual_list;
          while (current != NULL && stop != TRUE) 
    	  {
    	    cur_adiacence = &adiacence_array[current->node];
    	
    	     while (cur_adiacence != NULL && stop != TRUE) 
    		 {
    	       if (nodeinfo_mtx[cur_adiacence->node][i].label == tentative) 
    		   {
    	         nodeinfo_mtx[cur_adiacence->node][i].label = permanent;
    	         nodeinfo_mtx[cur_adiacence->node][i].hop_number = num;
    	         nodeinfo_mtx[cur_adiacence->node][i].predecessor = current->node;
    	         listnode_insert(swapptr, cur_adiacence->node);
    
    	         if (cur_adiacence->node == routing_array[i].destination) 
    			 {
    	            stop = TRUE;
    	            back = routing_array[i].destination;
    	            while (back != routing_array[i].source)
    				{
    		           nodeinfo_mtx[back][i].precedent = nodeinfo_mtx[back][i].predecessor;
    		           listnode_insert(&path_array[i], back);
    	  	           back = nodeinfo_mtx[back][i].predecessor;
    				}
    	      
    	            listnode_insert(&path_array[i],routing_array[i].source);
    			 }
    		   }
    	       cur_adiacence = cur_adiacence->nextnode_ptr;
    		 }
           	 current = current->nextnode_ptr;
          }
          
          listnode_free(actual_list);
    
          actual_list = listnode_init();
         
          if (stop != TRUE)
    	  listnode_copy(swapptr, actual_list); 
    		 
          listnode_free(swapptr);
          
          swapptr = listnode_init();
          
          num++;
        }
        routing_array[i].length = num;
        stop = FALSE;
      }
    //  free(current);
      free(swapptr);
      free(cur_adiacence);
    //  free(actual_list);
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ho letto tutto il codice ma gia' queste due righe

    codice:
    LISTNODEPTR current = malloc(sizeof(LISTNODE));
    
    current = NULL;
    sono errate.

    Tu allochi memoria e assegni il puntatore restituito e subito dopo poni il puntatore uguale a NULL senza tenere in considerazione il blocco di memoria allocato?

    Ci credo che alla fine una free di quel blocco ti dara' un errore ...

    Probabilmente, dato che current e' un puntatore che usi per spostarti tra gli elementi, non devi utilizzarlo per allocare memoria ...

  8. #8
    thanks so much, I'm a slouch

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.