Oppure

Loading
02/02/10 17:41
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!!! :grr:

VI RINGRAZIO TANTISSIMOOOOOOOOOOOOOOOO

-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
#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 08/02/10 10:22
aaa
02/02/10 19:15
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!!! :grr:

VI RINGRAZIO TANTISSIMOOOOOOOOOOOOOOOO

-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
#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à?
02/02/10 19:41
Fabullo
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.

-------------------------------------------------------------------------------------------

 

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);
        }
aaa
02/02/10 20:48
nessuno
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ì

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à.
03/02/10 9:05
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!

(PER CASO CONOSCI ALTRI ESEMPI DI MIX CHE NON FUNZIONANO????)
Ultima modifica effettuata da Fabullo 03/02/10 9:06
aaa
03/02/10 9:12
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.
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à.
03/02/10 17:17
HeDo
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.


:hail: :hail:
aaa