Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Το ξέρω ότι δεν δινω context, αλλά είναι τόσο κουλό το πρόβλημα που ίσως να μπορείτε τουλάχιστον να με κατευθύνετε.

 

Στο πρόγραμμα μου μέσα σε κάποια επανάληψη θέλω να τυπώσω δύο αντικείμενα.

 

Γράφω λοιπόν αυτό

cout << oldLabel.printLabel() << " vs " << newLabel.printLabel() << endl; 
(τα printLabel επιστρέφουν std::string και ειναι const)

 

Χωρίς το παραπάνω το πρόβλημα δουλεύει και τερματίζει. Με το παραπάνω το πρόγραμμα κρασάρει(αλλού) και μαλιστα μεχρι να κρασάρει βγάζει διαφορετικά αποτελέσματα από οτι χωρίς το cout.

 

Το τελείως κουλό ειναι οτι αν αντι για την παραπάνω εντολή γραψω:

cout << oldLabel.printLabel();
cout << " vs " << newLabel.printLabel() << endl;
Τότε τυπωνει αυτα που θελω και τερματίζει οπως πριν.

 

Πώς διάλο γίνεται αυτό;

Δημοσ.

Έλεγα μήπως έχει να κάνει με τον τρόπο που κάνει chain το cout stream, αλλά αν πάλι χτυπάει τότε προφανώς έκανα λάθος.

 

Σίγουρα είναι όμως εκεί το πρόβλημά σου; Μήπως σου έχει χτυπήσει κάτι άλλο νωρίτερα κι απλώς αργεί να στο εκδηλώσει;

Δημοσ.

Η μονη διαφορα στο πρωτο με το δευτερο, ειναι οι στο πρωτο καλεις πρωτα την newLabel και μετα την oldLabel, ενω στο δευτερο ειναι κανονικα (πρωτα το oldLabel και μετα το newLabel)

Δημοσ. (επεξεργασμένο)

@defacer - όχι, υποθετω αν ηταν τετοιας φύσης το πρόβλημα θα ειχα θέμα και στα 2 couts

 

@Papakaliati - ναι προφανως, το ερώτημα ειναι πού και τι.

 

@παπι - αλλάζοντας την σειρα στο 1 cout δεν αλλαξε κατι.

 

Επίσης, τρέχοντας σαν minimal στην main το παρακάτω, τρέχει κανονικά.

 

int main(int argc, char* argv[])
{
	Label<int> L(...);
	Label<int> Q(...);

	cout << L.printLabel() << " vs " << Q.printLabel() << endl;

	return 0;
}
Επίσης αν σε προηγούμενο βήμα του αλγορίθμου προσπαθήσω να τυπώσω με το 1 cout δύο άλλα labels τυπώνονται πάλι σωστά.

 

Η λογική σκέψη θα ηταν ότι τα newLabel και oldLabel έχουν καποιο πρόβλημα, αλλα με τα χωριστά cout τυπώνοντια κανονικά.

 

Δεν ξέρω αν έχει σημασία, αλλα η printLabel είναι αυτή:

 

 

 

//nodeID -> int
//arrivalTime -> int
//size -> int
//criteria[i] -> T*
template <typename T> string Label<T>::printLabel() const
{
	stringstream stream;

	stream << "(N:" << nodeID << ", C:{";

	for (int i = 0; i < size; i++)
	{
		stream << criteria[i];

		if(i < size - 1)
			stream << ",";
	}

	stream << "}, A:" << arrivalTime << ")";

	return stream.str();
}

 

 

edit: Και για να γίνει ακόμα πιο περίεργο το πρόβλημα δεν υπάρχει στο g++, αλλά μόνο στο vs2010 που το ετρεχα αρχικά. Και πέρα από αυτό το προγραμμα βγάζει άλλα αποτελέσματα(=βρισκει διαφορετικές λυσεις) όταν τρέχει με vs2010 και άλλα με g++. wtf

Επεξ/σία από bnvdarklord
Δημοσ.

Λοιπον δεν ξερω γιατι δεν εδωσα σημασία νωρίτερα, αλλα όταν δίνω το cout της μιας γραμμής το πρόγραμμα κρασάρει χωρις να φτάσει ποτε στην εντολή αυτή, εβαλα breakpoint και δεν έγινε ποτέ. Λογική = 0

Δημοσ.

Ναι ναι, για desktop.

 

Μπορει να το προκαλεί καποιο memory leak;

 

Έτρεξα το dr memory(δεν εχω χρησιμοποιησει ξανα κατι τετοιο) σε εκτελέσιμο χωρις την προβληματική εντολή ωστε να τερματίσει κανονικά, και βγάζει καποια errors αλλά δεν τα πολυκαταλαβαίνω. Δεν ξερω αν μπορείτε να βγάλετε άκρη χωρις κώδικα για το ειδος του καθε προβλήματος, αλλα τα παραθέτω

results.txt

Δημοσ.

Εάν δεν είναι ευαίσθητα δεδομένα, τότε νομίζω ότι θα είναι καλύτερα να ανεβάσεις ολόκληρο τον κώδικα από την κλάση plus κώδικα που να δημιουργεί πρόβλημα και να είναι ολόκληρος. 

Δημοσ.

Επειδη ειναι πτυχιακή θα προτιμούσα να μην το ανεβάσω εδω... Αλλά αν θέλει κάποιος να του ριξει μια ματιά σε pm δεν έχω πρόβλημα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...