Fabullo (Normal User)
Newbie
Messaggi: 3
Iscritto: 02/02/2010
|
Ciao a tutti,
vi sarei infinitamente grado se qualcuno potesse darmi una mano per capire come mai il seguente pezzo di programma funziona in debug ma non in release. Al momento sto utilizzando Visual Studio 2008, ho provato a compilarlo su linux e lì non mi da problemi, ... che palle!!!
VI RINGRAZIO TANTISSIMOOOOOOOOOOOOOOOO
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Codice sorgente - presumibilmente C++ |
#include <stdlib.h> #include <stdio.h> #include <assert.h> #include <time.h> #include <iostream> #include <fstream> #include <math.h> #include <string.h> #include <errno.h> #include <string> #include <sstream> #include <errno.h> #include <vector> #include <algorithm> #include <set> using namespace std; typedef struct{ int progressivo; int colonna_temporale_IN[1500]; int colonna_temporale_OUT[1500]; }risorsa_localita; typedef struct{ int progressivo; vector <risorsa_localita > risorse_localita; }struttura_risorse_localita; struttura_risorse_localita *vettore_risorse_localita; int main() { int i,j,k; vettore_risorse_localita=(struttura_risorse_localita *)calloc(1000,sizeof(struttura_risorse_localita)); for(i=0;i<1000;i++){ vettore_risorse_localita[i].progressivo=i; for(j=0;j<5;j++){ risorsa_localita risorsa_appoggio; for(k=0;k<1500;k++){risorsa_appoggio.colonna_temporale_IN[k]=0;} for(k=0;k<1500;k++){risorsa_appoggio.colonna_temporale_OUT[k]=0;} vettore_risorse_localita[i].risorse_localita.push_back(risorsa_appoggio); } cout << "PREMI INVIO\n"; cin.get(); return 1; } }
|
Ultima modifica effettuata da Fabullo il 08/02/2010 alle 11:22 |
|
()
Newbie
Messaggi:
Iscritto:
|
Postato originariamente da Fabullo:
Ciao a tutti,
vi sarei infinitamente grado se qualcuno potesse darmi una mano per capire come mai il seguente pezzo di programma funziona in debug ma non in release. Al momento sto utilizzando Visual Studio 2008, ho provato a compilarlo su linux e lì non mi da problemi, ... che palle!!!
VI RINGRAZIO TANTISSIMOOOOOOOOOOOOOOOO
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Codice sorgente - presumibilmente C++ |
#include <stdlib.h> #include <stdio.h> #include <assert.h> #include <time.h> #include <iostream> #include <fstream> #include <math.h> #include <string.h> #include <errno.h> #include <string> #include <sstream> #include <errno.h> #include <vector> #include <algorithm> #include <set> using namespace std; typedef struct{ int progressivo; int colonna_temporale_IN[1500]; int colonna_temporale_OUT[1500]; }risorsa_localita; typedef struct{ int progressivo; vector <risorsa_localita > risorse_localita; }struttura_risorse_localita; struttura_risorse_localita *vettore_risorse_localita; int main() { int i,j,k; vettore_risorse_localita=(struttura_risorse_localita *)calloc(1000,sizeof(struttura_risorse_localita)); for(i=0;i<1000;i++){ vettore_risorse_localita[i].progressivo=i; for(j=0;j<5;j++){ risorsa_localita risorsa_appoggio; for(k=0;k<1500;k++){risorsa_appoggio.colonna_temporale_IN[k]=0;} for(k=0;k<1500;k++){risorsa_appoggio.colonna_temporale_OUT[k]=0;} vettore_risorse_localita[i].risorse_localita.push_back(risorsa_appoggio); } cout << "PREMI INVIO\n"; cin.get(); return 1; } }
|
|
Poi essere più preciso, che problemi ti dà? |
|
Fabullo (Normal User)
Newbie
Messaggi: 3
Iscritto: 02/02/2010
|
Intanto grazie per l'interessamento. Al momento sto utilizzando visual studio 2008 e compilando quel sorgente in configurazione debug non mi da nessun problema. Compilando ed eseguendo in release invece si blocca l'esecuzione precisamente nel seguente punto della libreria vector dicendo:
------------------------------------------------------------------------------------------
Microsoft Visual Studio C Runtime Library has detected a fatal error in TCM di nodo.exe.
Press Break to debug the program or Continue to terminate the program.
-------------------------------------------------------------------------------------------
Codice sorgente - presumibilmente Plain Text |
iterator insert(const_iterator _Where, const _Ty& _Val)
{ // insert _Val at _Where
size_type _Off = size() == 0 ? 0 : _Where - begin();
_Insert_n(_Where, (size_type)1, _Val);
return (begin() + _Off);
}
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Ecco un ottimo esempio per quando si raccomanda di non mischiare codice C e C++ ...
Dato che stai usando un vector, non è bene usare le funzioni di allocazione di memoria del C (malloc, calloc ...) ma usa solo l'apposita keyword new del C++
Quindi, al posto della calloc
vettore_risorse_localita = new struttura_risorse_localita[1000];
E per ottimizzare, per quanto riguarda le for che azzerano i vettori, ne puoi usare una sola, così
Codice sorgente - presumibilmente Plain Text |
for(k=0; k<1500; k++)
risorsa_appoggio.colonna_temporale_IN[k] =
risorsa_appoggio.colonna_temporale_OUT[k] = 0;
|
Considera anche l'uso di una memset al posto della for.
P.S. Il fatto che "funzioni" in modalità Debug o con Linux, non ha molta importanza ... ci sono parecchi (strani e complessi) motivi per cui "sembra" funzionare ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Fabullo (Normal User)
Newbie
Messaggi: 3
Iscritto: 02/02/2010
|
IO TI AMOOOOOOOOOOO!!!!!!!!!!!!! SONO FUORI DAL MIO UFFICIO A COSTRUIRE UNA STATUA IN ORO E AVORIO A TUA IMMAGINE E SOMIGLIANZA CHE ADORERO' OGNI VOLTA CHE CI PASSO DAVANTI!
(PER CASO CONOSCI ALTRI ESEMPI DI MIX CHE NON FUNZIONANO????)
Ultima modifica effettuata da Fabullo il 03/02/2010 alle 10:06 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da Fabullo:
IO TI AMOOOOOOOOOOO!!!!!!!!!!!!! SONO FUORI DAL MIO UFFICIO A COSTRUIRE UNA STATUA IN ORO E AVORIO A TUA IMMAGINE E SOMIGLIANZA CHE ADORERO' OGNI VOLTA CHE CI PASSO DAVANTI!
|
'sagerato ...
(PER CASO CONOSCI ALTRI ESEMPI DI MIX CHE NON FUNZIONANO????) |
Non specifici esempi, ma è SEMPRE sconsigliato ... se usi le librerie di C++, devi usare new e delete. Se programmi in C, senza librerie di C++, allora usi la malloc e la free.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da nessuno:
Postato originariamente da Fabullo:
IO TI AMOOOOOOOOOOO!!!!!!!!!!!!! SONO FUORI DAL MIO UFFICIO A COSTRUIRE UNA STATUA IN ORO E AVORIO A TUA IMMAGINE E SOMIGLIANZA CHE ADORERO' OGNI VOLTA CHE CI PASSO DAVANTI!
|
'sagerato ...
(PER CASO CONOSCI ALTRI ESEMPI DI MIX CHE NON FUNZIONANO????) |
Non specifici esempi, ma è SEMPRE sconsigliato ... se usi le librerie di C++, devi usare new e delete. Se programmi in C, senza librerie di C++, allora usi la malloc e la free. |
|
|