-
Ο χρήστης migf1 έγραψε:
Thanks φίλε Raikkonen. Γενικώς γνωρίζω (πτυχίο Boston University Computer Science, το 1992), αλλά είχα πάνω από 10 χρόνια να ξανασχοληθώ. Τελευταία (που ανακάλυψα την PellesC) ξεκίνησα να γράφω ένα παραθυρικό πρόγραμμα λιανικής πώλησης (ταμείο, αποθήκη, λογαριασμοί).
Anyway, έχω πρόβλημα με τα παραπάνω free. Μου 'χτυπάει' σε άσχετα σημεία (μερικά τα κάνει ΟΚ και σε άλλα μου δίνει 'Access Violation' )
ΥΓ. Παρεμπιπτόντως, υπάρχουν εργαλεία που παρακολουθούν πόσα malloc/calloc κάνεις και πόσα free, έτσι ώστε να αποφεύγεις τα memory leaks... απλά δεν τα χρησιμοποιώ ακόμα.
Παρακαλώ!
Μια ερώτηση, θα κάνεις παραθυρικό πρόγραμμα χρησιμοποιώντας C??? Καλύτερα να χρησιμοποιήσεις C++ ή Java ακόμα καλύτερα (εκτός και αν η ταχύτητα είναι σημαντικό προσόν). Υπάρχει ακόμα και η Delphi (την οποία όμως δε γνωρίζω) . Στη C θέλεις πολύ κώδικα για κάτι τέτοια. Πιο βολικά μία οντοκεντρική γλώσσα.
Όσο αφορά τώρα τα προβλήματα που σου πετάει θα τα κοιτάξω αργότερα γιατί πρέπει να φύγω.
Για τα εργαλεία που λες υποθέτω ότι εξαρτάται από το πρόγραμμα που χρησιμοποιείς.
-
Ο χρήστης Raikkonen έγραψε:
Παρακαλώ!
Μια ερώτηση, θα κάνεις παραθυρικό πρόγραμμα χρησιμοποιώντας C??? Καλύτερα να χρησιμοποιήσεις C++ ή Java ακόμα καλύτερα (εκτός και αν η ταχύτητα είναι σημαντικό προσόν). Υπάρχει ακόμα και η Delphi (την οποία όμως δε γνωρίζω) . Στη C θέλεις πολύ κώδικα για κάτι τέτοια. Πιο βολικά μία οντοκεντρική γλώσσα.
C και ξερό ψωμί (Why we prefer C to C++)
Δεν είναι τόσο τρομερό πάντως. Τρως λίγο πακέτο για να φτιάξεις γενικές συναρτήσεις που έχουν να κάνουν με το παραθυρικό περιβάλλον της εφαρμογής σου, αλλά από κει και πέρα τις χρησιμοποιείς συνέχεια. Φτιάχνεις και μια βιβλιοθήκη, και τις έχεις και για άλλα προγράμματα.
Όσο αφορά τώρα τα προβλήματα που σου πετάει θα τα κοιτάξω αργότερα γιατί πρέπει να φύγω.
Thanks... παράλληλα το ψάχνω κι εγώ.
Για τα εργαλεία που λες υποθέτω ότι εξαρτάται από το πρόγραμμα που χρησιμοποιείς.
Όχι, υπάρχουν generic προγράμματα που κάνουν αυτή τη δουλειά. Τα περισσότερα μάλιστα είναι free. Απλώς δεν θυμάμαι πως τα λένε
Θα τα βρω όμως και θα επανέλθω.
-
ερώτησεις. 1) Τι ειναι η 'ψηφιακή υπογραφή χρήστη'. Αν κατάλαβα καλά έχει σχέση με την αγορά μέσω πιστωτικής.
2)Υπάρχει τρόπος να καταλάβουμε , αν μπαίνοντας σε κάποιο site , αυτό μας αποσυνδέει απο τον τοπικό διακομιστή και μας συνδέει με κάποιον άλλο σε κάποια υπερπόντια χώρα? -
Ο χρήστης migf1 έγραψε:
Παρακαλώ!
Μια ερώτηση, θα κάνεις παραθυρικό πρόγραμμα χρησιμοποιώντας C??? Καλύτερα να χρησιμοποιήσεις C++ ή Java ακόμα καλύτερα (εκτός και αν η ταχύτητα είναι σημαντικό προσόν). Υπάρχει ακόμα και η Delphi (την οποία όμως δε γνωρίζω) . Στη C θέλεις πολύ κώδικα για κάτι τέτοια. Πιο βολικά μία οντοκεντρική γλώσσα.
C και ξερό ψωμί (Why we prefer C to C++)
Δεν είναι τόσο τρομερό πάντως. Τρως λίγο πακέτο για να φτιάξεις γενικές συναρτήσεις που έχουν να κάνουν με το παραθυρικό περιβάλλον της εφαρμογής σου, αλλά από κει και πέρα τις χρησιμοποιείς συνέχεια. Φτιάχνεις και μια βιβλιοθήκη, και τις έχεις και για άλλα προγράμματα.
To ξέρω αυτό! Αλλά κάτι που θες 300 γραμμές κώδικα να το κάνεις σε C θες πολύ λιγότερες σε C++ και Java. Και εμένα μου αρέσε η C αλλά σε σχέση με αυτές θυμίζει ...assembly. Βέβαια αν έχει ένα παράξενο συντακτικο η C αυτό δε συκρίνεται με τίποτα με της C++ (που είναι ακόμα πιο παράξενο). Παρόλα αυτά η C++ είναι πανίσχυρη γλώσσα. Τώρα για συντακτικό καλύτερη είναι Java και πιο εύκολη στο προγραμματισμό (άσε που έχεις τα API της SUN και συνήθως χρησιμοποιείς έτοιμες συναρτήσεις).
Τέλος πάντων. Απλά η C δεν είναι και η καλύτερη για αυτό που θες να φτιάξεις. Συνήθως χρησιμοποιείται για προγραμματισμό συστήματος.
Όσο αφορά τώρα τα προβλήματα που σου πετάει θα τα κοιτάξω αργότερα γιατί πρέπει να φύγω.
Thanks... παράλληλα το ψάχνω κι εγώ.
Δες το επόμενο.
Για τα εργαλεία που λες υποθέτω ότι εξαρτάται από το πρόγραμμα που χρησιμοποιείς.
Όχι, υπάρχουν generic προγράμματα που κάνουν αυτή τη δουλειά. Τα περισσότερα μάλιστα είναι free. Απλώς δεν θυμάμαι πως τα λένε
Θα τα βρω όμως και θα επανέλθω.
Δεν το ήξερα (και ουτε καν μπορούσα να φανταστώ ότι θα μάθαινα κάτι τετοιο εδώ)!
-
#include /* for calloc() /
#include / for strncpy() */
#include#define MAX_STRINGS 10
#define SLEN 21char **StringsList;
int main()
{
int i;if ( (StringsList = (char **)calloc( MAX_STRINGS, SLEN * sizeof(char))) == NULL) { printf('Not enough memory to allocate\n'); exit(EXIT_FAILURE); } for ( i=0; i < MAX_STRINGS; i++ ) { if ( (StringsList[i] = (char *)calloc(SLEN, sizeof(char))) == NULL ) { printf('Not enough memory to allocate\n'); exit(EXIT_FAILURE); } } strncpy( StringsList[0], 'Hi there\0', SLEN-1); printf('%s\n', StringsList[0]); for (i=0; i
-
Ο χρήστης kostakis έγραψε:
ερώτησεις. 1) Τι ειναι η 'ψηφιακή υπογραφή χρήστη'. Αν κατάλαβα καλά έχει σχέση με την αγορά μέσω πιστωτικής.
2)Υπάρχει τρόπος να καταλάβουμε , αν μπαίνοντας σε κάποιο site , αυτό μας αποσυνδέει απο τον τοπικό διακομιστή και μας συνδέει με κάποιον άλλο σε κάποια υπερπόντια χώρα?Για το 1ο ερώτημα σου δεν θυμάμαι να σου απαντήσω, αλλά για το 2ο υποθέτω πως θα σου ζητάει να συνδεθείς. Γενικά πάντως για να είσαι σίγουρος απεφευγε τις ύποπτες σελίδες.
-
Ο χρήστης kostakis έγραψε:
ερώτησεις. 1) Τι ειναι η 'ψηφιακή υπογραφή χρήστη'. Αν κατάλαβα καλά έχει σχέση με την αγορά μέσω πιστωτικής.
2)Υπάρχει τρόπος να καταλάβουμε , αν μπαίνοντας σε κάποιο site , αυτό μας αποσυνδέει απο τον τοπικό διακομιστή και μας συνδέει με κάποιον άλλο σε κάποια υπερπόντια χώρα?- Ηλεκτρονικός τρόπος ταυτοποίησης προσώπου, κάτι σαν την αστυνομική ταυτότητα αλλά σε ηλεκτρονική μορφή. Συνήθως δεν απαιτείται για ηλεκτρονικό εμπόριο. Αντίθετα, κατά κόρον χρησιμοποείται η ψηφιακή υπογραφή του εξυπηρετητή, στον οποίο υποβάλεις τα στοιχεία της πιστωτικής.
- Εννοείς να διακόψει την dial-up και να σε συνδέσει τηλεφωνικά με κάποιον άλλον dial-up server και να χρεωθείς επομένως ανάλογα; Γίνεται ... και για να το διαπιστώσεις πρέπει να δείς τα properties της ενεργής σύνδεσης. (Στα XP π.χ. ΘΕΣΕΙΣ ΔΙΚΤΥΟΥ->δεξι κλικ->Ιδιότητες και βλέπεις όλες τις δυνατές συνδέσεις και ποιές είναι ενεργές. Αν δεις κάποια άλλη από αυτή που έχεις για να συνδεεσαι με τον provider σου, τότε έχεις πρόβλημα!
-
Ο χρήστης migf1 έγραψε:
C και ξερό ψωμί (Why we prefer C to C++)
Δεν είναι τόσο τρομερό πάντως. Τρως λίγο πακέτο για να φτιάξεις γενικές συναρτήσεις που έχουν να κάνουν με το παραθυρικό περιβάλλον της εφαρμογής σου, αλλά από κει και πέρα τις χρησιμοποιείς συνέχεια. Φτιάχνεις και μια βιβλιοθήκη, και τις έχεις και για άλλα προγράμματα.
Θα συμφωνήσω με τον Raikkonen. Εσύ αναφέρθηκες για εφαρμογή σε παραθυρικό περιβάλλον.
Αυτό που θες για να είσαι καλλυμένος, είναι μία βιβλιοθήκη για GUI, που καλά θα έκανε να είναι και cross-platform.
Τα wxWindows για παράδειγμα είναι πολύ δημοφιλή σε αυτό. Επίσης αν θες να πας πιο πολύ 'bare-bones', η βιβλιοθήκη qt της trolltech, αν προτιμάς C++, ή το GTK+ Toolkit αν προτιμάς C - έχει βέβαια και bindings σε χίλες δυο άλλες γλώσσες. Για αυτά υπάρχουν και GUI εργαλεία, helpers που σε βοηθάνε πολύ στα διάφορα 'στανταρ' πράγματα (menu bars, toolbars) και πολύ documentation και παραδείγματα.
Και φυσικά υπάρχει η Java, με τα καλά και τα κακά της, και επιτέλους με ένα GUI toolkit που κάνει τεράστια διαφορά για τους χρήστες γιατί επιτέλους είναι πολύ πιο γρήγορο στα GUI-κά , το swt (αντίο Swing!), αυτό που χρησιμοποιείται στο Eclipse.
-
Ο χρήστης avel έγραψε:
Και φυσικά υπάρχει η Java, με τα καλά και τα κακά της, και επιτέλους με ένα GUI toolkit που κάνει τεράστια διαφορά για τους χρήστες γιατί επιτέλους είναι πολύ πιο γρήγορο στα GUI-κά , το swt (αντίο Swing!), αυτό που χρησιμοποιείται στο Eclipse.
Ααχχχ το Eclipse τι προγραμματάρα!!! Το προηγούμενο εξάμηνο που έπαιρνα Java μας είπανε να αναπτύξουμε το project εκεί και τι δίκιο είχανε! Δεν έχω ξαναγράψει πιο γρήγορα κώδικα!
-
Ο χρήστης Raikkonen έγραψε:
To ξέρω αυτό! Αλλά κάτι που θες 300 γραμμές κώδικα να το κάνεις σε C θες πολύ λιγότερες σε C++ και Java. Και εμένα μου αρέσε η C αλλά σε σχέση με αυτές θυμίζει ...assembly. Βέβαια αν έχει ένα παράξενο συντακτικο η C αυτό δε συκρίνεται με τίποτα με της C++ (που είναι ακόμα πιο παράξενο). Παρόλα αυτά η C++ είναι πανίσχυρη γλώσσα. Τώρα για συντακτικό καλύτερη είναι Java και πιο εύκολη στο προγραμματισμό (άσε που έχεις τα API της SUN και συνήθως χρησιμοποιείς έτοιμες συναρτήσεις).Τέλος πάντων. Απλά η C δεν είναι και η καλύτερη για αυτό που θες να φτιάξεις. Συνήθως χρησιμοποιείται για προγραμματισμό συστήματος.
Η Java έχει pointers? Θυμάμαι ότι δεν είχε όταν πρωτοβγήκε. H C για μένα (και πολλούς άλλους) είναι η απόλυτη και αξεπέραστη γλώσσα προγραμματισμού... συνδυάζει τα πάντα (αυτονομία, ταχύτητα, high & low level programming, code optimization και πολλά πολλά ακόμα)! Δεν είναι άλλωστε τυχαίο πως η 'Ιερά Βίβλος' για προγραμματισμό στα Windows, το 'Programming Windows' του S.Petzold έχει όλα τα παραδέιγματά του σε C.
Για τα εργαλεία που λες υποθέτω ότι εξαρτάται από το πρόγραμμα που χρησιμοποιείς.
Όχι, υπάρχουν generic προγράμματα που κάνουν αυτή τη δουλειά. Τα περισσότερα μάλιστα είναι free. Απλώς δεν θυμάμαι πως τα λένε
Θα τα βρω όμως και θα επανέλθω.
Δεν το ήξερα (και ουτε καν μπορούσα να φανταστώ ότι θα μάθαινα κάτι τετοιο εδώ)!
Βρήκα ένα, αλλά τυρέχει σε command-line Splint (παραλλαγή του Lint). Έχει βγάλει και η IBM ένα, αλλά δυστυχώς δεν το θυμάμαι.
-
(περί malloc εργαλείων)
Ο χρήστης migf1 έγραψε:
Έχει βγάλει και η IBM ένα, αλλά δυστυχώς δεν το θυμάμαι.Purify.
Commercial, βέβαια.
Από open-source υπάρχει το electric fence.
-
Ο χρήστης avel έγραψε:
Θα συμφωνήσω με τον Raikkonen. Εσύ αναφέρθηκες για εφαρμογή σε παραθυρικό περιβάλλον.
Αυτό που θες για να είσαι καλλυμένος, είναι μία βιβλιοθήκη για GUI, που καλά θα έκανε να είναι και cross-platform.
Τα wxWindows για παράδειγμα είναι πολύ δημοφιλή σε αυτό. Επίσης αν θες να πας πιο πολύ 'bare-bones', η βιβλιοθήκη qt της trolltech, αν προτιμάς C++, ή το GTK+ Toolkit αν προτιμάς C - έχει βέβαια και bindings σε χίλες δυο άλλες γλώσσες. Για αυτά υπάρχουν και GUI εργαλεία, helpers που σε βοηθάνε πολύ στα διάφορα 'στανταρ' πράγματα (menu bars, toolbars) και πολύ documentation και παραδείγματα.
Και φυσικά υπάρχει η Java, με τα καλά και τα κακά της, και επιτέλους με ένα GUI toolkit που κάνει τεράστια διαφορά για τους χρήστες γιατί επιτέλους είναι πολύ πιο γρήγορο στα GUI-κά , το swt (αντίο Swing!), αυτό που χρησιμοποιείται στο Eclipse.
Παιδιά δεν μπορώ να είμαι απόλυτος, αφού δεν τα έχω δοκιμάσει όλα αυτά που αναφέρεις (thanks, btw).
Είμαι όμως της... παλιάς σχολής, όπου θέλω να έχω πλήρη έλεγχο στο τι κάνω. Και είμαι και υποχόνδριος με την βελτιστοποίηση.
Για μένα το παραθυρικό περιβάλλον των Windows δεν είναι και τόσο δύσκολο, αφού επί πολλά χρόνια προγραμμάτιζα GEM/AES: το γραφικό περιβάλλον του Atari ST, το οποίο βασιζόταν στις ίδιες ακριβώς αρχές με τα Windows (event driven programming).
Σε γενικές γραμμές, προτιμώ την ώρα που θα φάω για να μάθω τις συναρτήσεις μιας βιβλιοθήκης να τη φάω μαθαίνοτας το real-thing, έτσω και αν με πάρει λίγο περισσότερο. Μαθαίνοντας το 'real thing' πρώτα μειώνεις δραματικά το χρόνο εκμάθησης οποιασδήποτε άλλης higher-level υλοποίησης.
Θα ρίξω όμως μια ματιά στις βιβλιοθήκες που προτείνιες φίλε Avel (έτσι κι αλλιώς )
-
Ο χρήστης avel έγραψε:
(περί malloc εργαλείων)Έχει βγάλει και η IBM ένα, αλλά δυστυχώς δεν το θυμάμαι.
Purify.
Commercial, βέβαια.
Από open-source υπάρχει το electric fence.
Μπράβο ρε συ Avel, το Purify είναι το ένα!
Έχουν γραφικά περιβάλλοντα αυτά;
-
Ο χρήστης Raikkonen έγραψε:
[snip]Τρέχω αυτόν τον κώδικα (εκτός και αν εννοείς άλλον) και δεν έχει κανένα πρόβλημα. Απλά πρέπει να προσέχεις να μην χρησιμοποιείς δείκτες που τους έχεις απελευθερώσει γιατί τότε είναι επικίνδυνο. Επίσης μήπως απελευθερώνεις τον ίδιο δείκτη 2 φορές? Πρόσεχέ το και αυτό.
Το παραπάνω το έτρεξα σε Visual Studio 6 της Microsoft αλλά και με gcc σε Solaris!
Σε ευχαριστώ πολύ για το χρόνο σου φίλε Raikkonen. Και στα δικά μου test-runs μια χαρά τρέχει... στο πρόγραμμά μου όμως κρασάρει. Κάπου αλλού την έχω κάνει τη μαλακία (κι άντε βρες την)
-
Ο χρήστης migf1 έγραψε:
[snip]Τρέχω αυτόν τον κώδικα (εκτός και αν εννοείς άλλον) και δεν έχει κανένα πρόβλημα. Απλά πρέπει να προσέχεις να μην χρησιμοποιείς δείκτες που τους έχεις απελευθερώσει γιατί τότε είναι επικίνδυνο. Επίσης μήπως απελευθερώνεις τον ίδιο δείκτη 2 φορές? Πρόσεχέ το και αυτό.
Το παραπάνω το έτρεξα σε Visual Studio 6 της Microsoft αλλά και με gcc σε Solaris!
Σε ευχαριστώ πολύ για το χρόνο σου φίλε Raikkonen. Και στα δικά μου test-runs μια χαρά τρέχει... στο πρόγραμμά μου όμως κρασάρει. Κάπου αλλού την έχω κάνει τη μαλακία (κι άντε βρες την)
Παρακαλώ!
Άρα εννοείς άλλο κώδικα! Είπα και γω! Σου ξαναλέω το παιχνίδι με τους pointers είναι επικίνδυνο πλην όμως απαραίτητο. Είσαι σίγουρος ότι δεν κάνεις κάπου παραπάνω από μια φορά free έναν δείκτη? Ή ότι δεν χρησιμοποιείς κάποιο περιπλανώμενο δείκτη? Αν θες γίνε πιο συγκεκριμένος στον κώδικα που φτιάχνεις ή τέλος πάντων έχε υπόψην σου τις παραπάνω παρατηρήσεις!
-
Ο χρήστης migf1 έγραψε:
Η Java έχει pointers? Θυμάμαι ότι δεν είχε όταν πρωτοβγήκε. H C για μένα (και πολλούς άλλους) είναι η απόλυτη και αξεπέραστη γλώσσα προγραμματισμού... συνδυάζει τα πάντα (αυτονομία, ταχύτητα, high & low level programming, code optimization και πολλά πολλά ακόμα)! Δεν είναι άλλωστε τυχαίο πως η 'Ιερά Βίβλος' για προγραμματισμό στα Windows, το 'Programming Windows' του S.Petzold έχει όλα τα παραδέιγματά του σε C.
Όχι δεν έχει pointers! Όχι όπως η C / C++ τουλάχιστον. Δεν διαφωνώ σε αυτά που λες ...αλλά τα ίδια έχει και η C++ και πολύ πιο πανίσχυρα χαρακτηριστικά (απλά δεν είναι τόσο compact για ευνόητους λόγους)! Κοίταξε δε προσπαθώ να σου αλλάξω την άποψη που έχεις για τη C. Αυτό που θέλω να σου πω είναι ότι ΔΕΝ υπάρχει η καλύτερη γλώσσα. Κάθε γλώσσα είναι καλή σε κάποιο τομέα. Ε η C δεν είναι η γλώσσα για μια παραθυρική εφαρμογή. Είναι καλή για Compilers η και λειτοργικά συστήματα και σε ότι έχει σχέση με προγραμματισμό συστήματος. Αλλά όχι αυτό. Τώρα αν το θέμα είναι ότι δεν έχεις ασχοληθεί με αυτές τις γλώσσες καλό είναι αν είσαι ενεργό μέλος του χώρου να τις μάθεις (έστω και αν δεν προγραμματίσεις ποτέ - θα σε κάνει καλύτερο προγραμματιστή στη C).
Στα μισά βασικά προγραμματιστικά μαθήματα της σχολής μου χρησιμοποιούμε C!
-
Ο χρήστης Raikkonen έγραψε:
Παρακαλώ!
Άρα εννοείς άλλο κώδικα! Είπα και γω! Σου ξαναλέω το παιχνίδι με τους pointers είναι επικίνδυνο πλην όμως απαραίτητο. Είσαι σίγουρος ότι δεν κάνεις κάπου παραπάνω από μια φορά free έναν δείκτη? Ή ότι δεν χρησιμοποιείς κάποιο περιπλανώμενο δείκτη? Αν θες γίνε πιο συγκεκριμένος στον κώδικα που φτιάχνεις ή τέλος πάντων έχε υπόψην σου τις παραπάνω παρατηρήσεις!
You asked for it, here it comes (μη τρομάξεις )
typedef struct DlgCombo { char *ComboText; char **ComboStrings; } DlgCombo; typedef struct DlgELCombo { char *EditText; char **ListStrings; } DlgELCombo; struct DlgCECombo { struct DlgCombo ComboBox; char *EditText; }; struct DlgCheckbox { char *Text; int Checked; }; struct DlgPButton { char *text; char *bitmap; }; typedef struct ProdDlgData { DlgCombo Code; DlgCombo Supplier; DlgCombo SupAbrev; struct DlgCheckbox ChkSupFilter; DlgCombo Season; DlgCombo Type; DlgCombo Material; DlgCombo Quality; DlgCombo Height; DlgCombo Form; DlgCombo MUnit; DlgCombo Country; struct DlgCECombo SizeSet; DlgELCombo AllColors; DlgELCombo PrdColors; struct DlgCheckbox ChkStickyFileds; struct DlgCheckbox ChkSupplier; struct DlgCheckbox ChkSeason; struct DlgCheckbox ChkType; struct DlgCheckbox ChkMaterial; struct DlgCheckbox ChkQuality; struct DlgCheckbox ChkForm; struct DlgCheckbox ChkMUnit; struct DlgCheckbox ChkSizeset; struct DlgCheckbox ChkColors; struct DlgCheckbox ChkDiscount; struct DlgCheckbox ChkTax; DlgCombo TaxPercentage; } PROD_DLGDATA; // ===================================================== // DIALOG PRODUCTS (Allocate Memory for a DlgCombo Structure) // // // ===================================================== // BOOL allocDlgCombo( DlgCombo *Combo, int max_n, int slen ) { register int i; if ( (Combo->ComboText = (char *) malloc( slen * sizeof( char )) ) == NULL ) return FALSE; if ( (Combo->ComboStrings = (char **) malloc( max_n * sizeof( char * )) ) == NULL ) return FALSE; for ( i=0; i < max_n; i++ ) if ( (Combo->ComboStrings[ i ] = (char *) malloc( slen * sizeof( char )) ) == NULL ) return FALSE; return TRUE; } // ===================================================== // DIALOG PRODUCTS (Allocate Memory for a DlgELCombo Structure) // // // ===================================================== // BOOL allocDlgELCombo( DlgELCombo *ELCombo, int max_n, int slen ) { register int i; if ( (ELCombo->EditText = (char *) calloc( slen, sizeof( char )) ) == NULL ) return FALSE; if ( (ELCombo->ListStrings = (char **) calloc( max_n, sizeof( char * )) ) == NULL ) return FALSE; for ( i=0; i < max_n; i++ ) if ( (ELCombo->ListStrings[ i ] = (char *) calloc( slen, sizeof( char )) ) == NULL ) return FALSE; return TRUE; } // ===================================================== // DIALOG PRODUCTS (Allocate Memory for Dialog Data) // // // ===================================================== // BOOL AllocProdDlgData( PROD_DLGDATA *DlgData ) { if ( !allocDlgCombo( &(DlgData->Code), MAX_PRODS, sLEN_PDCODE ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Supplier), MAX_SUPPS, sLEN_SUPNAME ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->SupAbrev), MAX_SUPPS, sLEN_SUPABREV ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Season), MAX_PDSEASONS, sLEN_PDSEASON ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Type), MAX_PDTYPES, sLEN_PDTYPE ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Material), MAX_PDMATERIALS, sLEN_PDMATERIAL ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Quality), MAX_PDQUALITIES, sLEN_PDQUALITY ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Height), MAX_PDHEIGHTS, sLEN_PDHEIGHT ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Form), MAX_PDFORMS, sLEN_PDFORM ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->MUnit), MAX_PDMUNITS, sLEN_PDMUNIT ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->Country), MAX_PDCOUNTRIES, sLEN_PDCOUNTRY ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->SizeSet.ComboBox), MAX_PDSIZESETS, sLEN_PDSIZSETNAME ) ) return FALSE; if ( (DlgData->SizeSet.EditText = (char *) calloc( MAX_PDSIZES_INSET * (sLEN_PDSIZSETSIZE+1)+1, sizeof( char )) ) == NULL ) return FALSE; if ( !allocDlgELCombo( &(DlgData->AllColors), MAX_PDALLCOLORS, sLEN_PDCOLOR ) ) return FALSE; if ( !allocDlgELCombo( &(DlgData->PrdColors), MAX_PDCOLORS, sLEN_PDCOLOR ) ) return FALSE; if ( !allocDlgCombo( &(DlgData->TaxPercentage), MAX_PDTAXPERS, sLEN_PERCENTAGE ) ) return FALSE; return TRUE; } // ===================================================== // DIALOG PRODUCTS (Free Memory of a DlgCombo Structure) // // // ===================================================== // void freeDlgCombo( DlgCombo Combo, int max_n ) { register int i; free( Combo.ComboText ); for ( i=0; i < max_n; i++ ) free( Combo.ComboStrings[ i ] ); free( Combo.ComboStrings ); return; } // ===================================================== // DIALOG PRODUCTS (Free Memory of a DlgELCombo Structure) // // // ===================================================== // void freeDlgELCombo( DlgELCombo ELCombo, int max_n ) { register int i; free( ELCombo.EditText ); for ( i=0; i < max_n; i++ ) free( ELCombo.ListStrings[ i ] ); free( ELCombo.ListStrings ); return; } // ===================================================== // DIALOG PRODUCTS (Free Dialog Data) // // // ===================================================== // void FreeProdDlgData( PROD_DLGDATA *DlgData ) { // free( DlgData ); // return; freeDlgCombo( DlgData->Code, MAX_PRODS ); freeDlgCombo( DlgData->Supplier, MAX_SUPPS ); freeDlgCombo( DlgData->SupAbrev, MAX_SUPPS ); freeDlgCombo( DlgData->Season, MAX_PDSEASONS ); freeDlgCombo( DlgData->Type, MAX_PDTYPES ); freeDlgCombo( DlgData->Material, MAX_PDMATERIALS ); freeDlgCombo( DlgData->Quality, MAX_PDQUALITIES ); freeDlgCombo( DlgData->Height, MAX_PDHEIGHTS ); freeDlgCombo( DlgData->Form, MAX_PDFORMS ); freeDlgCombo( DlgData->MUnit, MAX_PDMUNITS ); freeDlgCombo( DlgData->Country, MAX_PDCOUNTRIES ); freeDlgCombo( DlgData->SizeSet.ComboBox, MAX_PDSIZESETS ); free( DlgData->SizeSet.EditText); freeDlgELCombo( DlgData->AllColors, MAX_PDALLCOLORS ); freeDlgELCombo( DlgData->PrdColors, MAX_PDCOLORS ); freeDlgCombo( DlgData->TaxPercentage, MAX_PDTAXPERS ); return; }
Αυτές είναι οι βασικές ρουτίνες που δεσμέυουν/αποδεσμεύουν μνήμη μέχρι στιγμής. Όσο και να σπάω το κεφάλι μου, ΔΕΝ μπορώ να βρω που υπάρχει λάθος.
Ενδέχεται ξέρεις να είναι αλλού οτ πρόβλημα (π.χ. στις ρουτίνες που βάζουν τιμές στα strings, όπως π.χ. η παρακάτω):
// ===================================================== // DIALOG PRODUCTS (Set Deafult Values in the Dialog Data structure) // // // ===================================================== // void DefvalsProdDlgData( PROD_DLGDATA *DlgData ) { // --------- SUPPLIER FILTER CHECKBOX ---------- DlgData->ChkSupFilter.Checked = FALSE; // --------- TYPES ---------- // Set some d e f a u l t Types strncpy( DlgData->Type.ComboStrings[ 0 ], 'ÃÏÂÁ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 1 ], 'ÌÏÊÁÓÉÍÉ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 2 ], 'ÐÅÄÉËÏ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 3 ], 'ÐËÁÔÖÏÑÌÁ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 4 ], 'ÓÁÍÄÁËÉ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 5 ], 'ÓÁÃÉÏÍÁÑÁ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 6 ], 'ÌÐÏÔÁ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 7 ], 'ÌÐÏÔÁÊÉ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 8 ], 'ÔÓÏÊÁÑÏ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 9 ], 'ÅÓÐÁÍÔÑÉÃÉÁ\0',sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 10 ],'ÁÈËÇÔÉÊÏ\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 11 ],'ÓÁÍÅË\0', sLEN_PDTYPE-1 ); strncpy( DlgData->Type.ComboStrings[ 12 ],'ÖÉÁÐÁ\0', sLEN_PDTYPE-1 ); // S o r t the Type Strings (ascending) qsort( DlgData->Type.ComboStrings, MAX_PDTYPES, sLEN_PDTYPE, (void *) strcmp ); // --------- MATERIALS ---------- // Set some d e f a u l t Materials strncpy( DlgData->Material.ComboStrings[ 0 ], 'ÄÅÑÌÁ\0', sLEN_PDMATERIAL-1 ); strncpy( DlgData->Material.ComboStrings[ 1 ], 'ÕÖÁÓÌÁ\0', sLEN_PDMATERIAL-1 ); strncpy( DlgData->Material.ComboStrings[ 2 ], 'ÓÕÍÈÅÔÉÊÏ\0', sLEN_PDMATERIAL-1 ); strncpy( DlgData->Material.ComboStrings[ 3 ], 'ÅËÁÓÔÉÊÏ\0', sLEN_PDMATERIAL-1 ); // S o r t the Material Strings (ascending) qsort( DlgData->Material.ComboStrings, MAX_PDMATERIALS, sLEN_PDMATERIAL-1, (void *) strcmp ); // --------- QUALITIES ---------- // Set some d e f a u l t Qualities strncpy( DlgData->Quality.ComboStrings[ 0 ], 'Óåâñü\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 1 ], 'ÍÜðá\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 2 ], 'Ôåëáôßíé\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 3 ], 'ÓáôÝí\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 4 ], 'Ìáô\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 5 ], 'Ãêñü\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 6 ], 'Ãõáëéóôåñü\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 7 ], 'Êáóôüñé\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 8 ], 'Ößäé\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 9 ], 'Êñïêü\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 10 ], 'Ðüíõ Óêéí\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 11 ], 'ËåïðÜñ\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 12 ], 'Ðïýäñá\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 13 ], 'Íáìðïýê\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 14 ], 'Áíôßê\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 15 ], 'Öáóüëé\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 16 ], 'ÔéãñÝ\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 17 ], 'Ëáäåñü\0', sLEN_PDQUALITY-1 ); strncpy( DlgData->Quality.ComboStrings[ 18 ], 'Êñïýôá\0', sLEN_PDQUALITY-1 ); // S o r t the Quality Strings (ascending) qsort( DlgData->Quality.ComboStrings, MAX_PDQUALITIES, sLEN_PDQUALITY, (void *) strcmp ); // --------- FORMS ---------- // Set some d e f a u l t Forms strncpy( DlgData->Form.ComboStrings[ 0 ], 'ÊáñÝ (ìåãÜëï)\0', sLEN_PDFORM-1 ); strncpy( DlgData->Form.ComboStrings[ 1 ], 'Ìõôåñü\0', sLEN_PDFORM-1 ); strncpy( DlgData->Form.ComboStrings[ 2 ], 'Óôñïããõëü\0', sLEN_PDFORM-1 ); strncpy( DlgData->Form.ComboStrings[ 3 ], 'Óôñïããõëü (ðïìðÝ)\0', sLEN_PDFORM-1 ); strncpy( DlgData->Form.ComboStrings[ 4 ], 'Óôñïããõëü (ìðïõë)\0', sLEN_PDFORM-1 ); strncpy( DlgData->Form.ComboStrings[ 5 ], 'ÊáñÝ (ìéêñü)\0', sLEN_PDFORM-1 ); // S o r t the Form Strings (ascending) qsort( DlgData->Form.ComboStrings, MAX_PDFORMS, sLEN_PDFORM, (void *) strcmp ); // --------- HEIGHTS ---------- // Set some d e f a u l t Heights strncpy( DlgData->Height.ComboStrings[ 0 ], '01,0 åê. ( ßóéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 1 ], '01,5 åê. ( ßóéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 2 ], '02,0 åê. ( êáíïíéêü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 3 ], '02,5 åê. ( êáíïíéêü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 4 ], '03,0 åê. ( êáíïíéêü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 5 ], '03,5 åê. ( êáíïíéêü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 6 ], '04,0 åê. ( ìÝôñéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 7 ], '04,5 åê. ( ìÝôñéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 8 ], '05,0 åê. ( ìÝôñéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 9 ], '05,5 åê. ( ìÝôñéï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 10 ], '06,0 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 11 ], '06,5 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 12 ], '07,0 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 13 ], '07,5 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 14 ], '08,0 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 15 ], '08,5 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 16 ], '09,0 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 17 ], '09,5 åê. ( øçëü )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 18 ], '10,0 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 19 ], '10,5 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 20 ], '11,0 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 21 ], '11,5 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 22 ], '12,0 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 23 ], '12,5 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 24 ], '13,0 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); strncpy( DlgData->Height.ComboStrings[ 25 ], '13,5 åê. ( øçëüôåñï )\0', sLEN_PDHEIGHT-1 ); // S o r t the Height Strings (ascending) qsort( DlgData->Height.ComboStrings, MAX_PDHEIGHTS, sLEN_PDHEIGHT, (void *) strcmp ); // --------- MUNITS ---------- // Set some d e f a u l t MUnits strncpy(DlgData->MUnit.ComboStrings[ 0 ], 'æåýãç\0', sLEN_PDMUNIT-1 ); strncpy(DlgData->MUnit.ComboStrings[ 1 ], 'êïììÜôéá\0', sLEN_PDMUNIT-1 ); strncpy(DlgData->MUnit.ComboStrings[ 2 ], 'êïýôåò\0', sLEN_PDMUNIT-1 ); // S o r t the MUnit Strings (ascending) qsort(DlgData->MUnit.ComboStrings, MAX_PDMUNITS, sLEN_PDMUNIT, (void *) strcmp ); // --------- COUNTRIES ---------- // Set some d e f a u l t Countries strncpy( DlgData->Country.ComboStrings[ 0 ], 'ÅëëÜäá\0', sLEN_PDCOUNTRY-1 ); strncpy( DlgData->Country.ComboStrings[ 1 ], 'Éôáëßá\0', sLEN_PDCOUNTRY-1 ); strncpy( DlgData->Country.ComboStrings[ 2 ], 'Éóðáíßá\0', sLEN_PDCOUNTRY-1 ); strncpy( DlgData->Country.ComboStrings[ 3 ], 'Âñáæéëßá\0', sLEN_PDCOUNTRY-1 ); strncpy( DlgData->Country.ComboStrings[ 4 ], 'Êßíá\0', sLEN_PDCOUNTRY-1 ); strncpy( DlgData->Country.ComboStrings[ 5 ], 'ÔáúâÜí\0', sLEN_PDCOUNTRY-1 ); // S o r t the Country Strings (ascending) qsort( DlgData->Country.ComboStrings, MAX_PDCOUNTRIES, sLEN_PDCOUNTRY, (void *) strcmp ); // --------- SIZESETS ---------- // then, set some d e f a u l t Names and corresponding Sizes strncpy( DlgData->SizeSet.ComboBox.ComboStrings[ 0 ], 'ÃÕÍ. ÏËÏÊËÇÑÁ\0', sLEN_PDSIZSETNAME-1 ); strncpy( DlgData->SizeSet.ComboBox.ComboStrings[ 1 ], 'ÃÕÍ. ìå ÌÉÓÁ\0', sLEN_PDSIZSETNAME-1 ); strncpy( DlgData->SizeSet.ComboBox.ComboStrings[ 2 ], 'ÃÕÍ. ÊÏÕÔÅÓ\0', sLEN_PDSIZSETNAME-1 ); qsort( DlgData->SizeSet.ComboBox.ComboStrings, MAX_PDSIZESETS, sLEN_PDSIZSETSIZE, (void *) strcmp ); // --------- ALL COLORS ---------- // Set some d e f a u l t AllColors strncpy( DlgData->AllColors.ListStrings[ 0 ], 'ÌÁÕÑÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 1 ], 'ÌÐËÅ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 2 ], 'ÊÁÖÅ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 3 ], 'ÔÁÌÐÁ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 4 ], 'ÊÏÊÊÉÍÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 5 ], 'ÁÌÌÏÕ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 6 ], 'ÌÐÑÏÍÆÅ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 7 ], 'ÌÐÏÑÍÔÙ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 8 ], 'ÊÉÔÑÉÍÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 9 ], 'ÃÁËÁÆÉÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 10 ], 'ÑÏÆ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 11 ], 'ËÁ×ÁÍÉ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 12 ], 'ÐÑÁÓÉÍÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 13 ], '×ÑÕÓÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 14 ], 'ÁÓÇÌÉ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 15 ], 'ÐËÁÔÉÍÁ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 16 ], 'ËÅÕÊÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 17 ], 'ÐÁÃÏÕ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 18 ], 'ÓÏÌÏÍ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 19 ], 'ÂÅÑÁÌÁÍ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 20 ], 'ÐÏÑÔÏÊÁËÉ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 21 ], 'ËÅÕ+ÌÁÕ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 22 ], 'ÌÁÕ+ËÅÕ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 23 ], 'ÌÐÅÆ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 24 ], 'ÐÏÕÑÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 25 ], 'ÊÁÖ+ÔÁÌ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 26 ], 'ËÁÄÉ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 27 ], 'ÉÂÏÕÁÑ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 28 ], 'ÓÁÐ.ÌÇËÏ\0', sLEN_PDCOLOR-1 ); strncpy( DlgData->AllColors.ListStrings[ 29 ], '×ÁÊÉ\0', sLEN_PDCOLOR-1 ); // S o r t the AllColors Strings (ascending) qsort( DlgData->AllColors.ListStrings, MAX_PDALLCOLORS, sLEN_PDCOLOR, (void *) strcmp ); // --------- STICKY CHECKBOXES ---------- DlgData->ChkStickyFileds.Checked = FALSE; DlgData->ChkSupplier.Checked = FALSE; DlgData->ChkSeason.Checked = FALSE; DlgData->ChkType.Checked = FALSE; DlgData->ChkMaterial.Checked = FALSE; DlgData->ChkQuality.Checked = FALSE; DlgData->ChkForm.Checked = FALSE; DlgData->ChkMUnit.Checked = FALSE; DlgData->ChkSizeset.Checked = FALSE; DlgData->ChkColors.Checked = FALSE; DlgData->ChkDiscount.Checked = FALSE; DlgData->ChkTax.Checked = FALSE; // --------- TAX PERCENTAGES ---------- // then, set some d e f a u l t Tax Percentages strncpy( DlgData->TaxPercentage.ComboStrings[ 0 ], '08\0', sLEN_PERCENTAGE-1 ); strncpy( DlgData->TaxPercentage.ComboStrings[ 1 ], '18\0', sLEN_PERCENTAGE-1 ); strncpy( DlgData->TaxPercentage.ComboStrings[ 2 ], '09\0', sLEN_PERCENTAGE-1 ); strncpy( DlgData->TaxPercentage.ComboStrings[ 3 ], '19\0', sLEN_PERCENTAGE-1 ); // lastly, s o r t the TaxCats array (ascending) qsort( DlgData->TaxPercentage.ComboStrings, MAX_PDTAXPERS, sLEN_PERCENTAGE, (void *) strcmp ); return; }
Τα 'κινέζικα' είναι ελληνικοί χαρακτήρες.
Anyway, είναι too much για να κάτσεις να ασχοληθείς... ήδη ασχολήθηκες παραπάνω από αρκετά και σε ευχαριστώ!Θα την βρω την άκρη, που θα μου πάει
ΥΓ. Μόλις κατέβασα το MemProof (δουλεύει, λένε, με PellesC παρόλο που είνια φτιαγμένο για BorlandC).
-
Ο χρήστης Raikkonen έγραψε:
Όχι δεν έχει pointers! Όχι όπως η C / C++ τουλάχιστον. Δεν διαφωνώ σε αυτά που λες ...αλλά τα ίδια έχει και η C++ και πολύ πιο πανίσχυρα χαρακτηριστικά (απλά δεν είναι τόσο compact για ευνόητους λόγους)! Κοίταξε δε προσπαθώ να σου αλλάξω την άποψη που έχεις για τη C. Αυτό που θέλω να σου πω είναι ότι ΔΕΝ υπάρχει η καλύτερη γλώσσα. Κάθε γλώσσα είναι καλή σε κάποιο τομέα. Ε η C δεν είναι η γλώσσα για μια παραθυρική εφαρμογή. Είναι καλή για Compilers η και λειτοργικά συστήματα και σε ότι έχει σχέση με προγραμματισμό συστήματος. Αλλά όχι αυτό. Τώρα αν το θέμα είναι ότι δεν έχεις ασχοληθεί με αυτές τις γλώσσες καλό είναι αν είσαι ενεργό μέλος του χώρου να τις μάθεις (έστω και αν δεν προγραμματίσεις ποτέ - θα σε κάνει καλύτερο προγραμματιστή στη C).
Στα μισά βασικά προγραμματιστικά μαθήματα της σχολής μου χρησιμοποιούμε C!
Η C++ είναι βασικά υπερσύνολο της C, με βασική διαφοροποίηση την εγγενή υποστήριξη για classes και γενικώς object oriented programming. Έχει όμως μεγαλύτερο χρόνο εκμάθησης, αλλά το κυριότερο πολύ overhead.
Δεν διαφωνώ στο ότι η κάθε γλώσσα είναι καλύτερη για κάποιον συγκεκριμένο τομέα, δεν καταλαβαίνω όμως γιατί υποστηρίζεις πως η C δεν κάνει γενικώς για παραθυρικές εφαρμογές, τη στιγμή που όλα τα παραθυρικά περιβάλλοντα είναι κυρίως γραμμένα σε C.
Το καλύτερο είναι σχετικό, ξέρεις. Αν μετράει η επίδοση (ταχύτητα), το (μικρό) μέγεθος εκτελέσιμου κώδικα και γενικώς η βελτιστοποίηση πόρων, τότε η C είναι σαφώς καλύτερη.
-
Ο χρήστης migf1 έγραψε:
You asked for it, here it comes (μη τρομάξεις )
....
> >Αυτές είναι οι βασικές ρουτίνες που δεσμέυουν/αποδεσμεύουν μνήμη μέχρι στιγμής. Όσο και να σπάω το κεφάλι μου, ΔΕΝ μπορώ να βρω που υπάρχει λάθος. > >Ενδέχεται ξέρεις να είναι αλλού οτ πρόβλημα (π.χ. στις ρουτίνες που βάζουν τιμές στα strings, όπως π.χ. η παρακάτω): >``` >.... >
Τα 'κινέζικα' είναι ελληνικοί χαρακτήρες.
Anyway, είναι too much για να κάτσεις να ασχοληθείς... ήδη ασχολήθηκες παραπάνω από αρκετά και σε ευχαριστώ!Θα την βρω την άκρη, που θα μου πάει
Δεν έχω ξαναδεί τέτοιο κώδικα. Τι τεράστια structs είναι αυτά? Πράγματι παρά είναι πολύ όχι τόσο για το μέγεθος(και για αυτό φυσικά) αλλά κυρίως γιατί δεν ξέρω την 'ιστορία' του προγράμματος.
Χρησιμοποίησε debugger ή κάνε το χειροκίνητα. Προσπάθησε να σφίξεις τον κλοιό γύρω από την περιοχή που σου πετάει το πρόβλημα. Με μια γρήγορη ματιά που έριξα οι δεσμεύσεις/αποδεσμέυσεις δείχνουν να γίνονται σωστά. Αυτό είναι και εύκολο να το τσεκάρεις πέρνωντας ένα ένα το ξευγάρι συναρτήσεων (για αποδεύσμευση/δέσμευση) σε ένα test αρχείο και να δεις αν πετάει τίποτα.
Το ποιο πιθανό πιστέυω είναι αυτό που λες και συ ότι είναι κάπου στον 'πελάτη' κώδικα. Επειδή έχεις πολλούς pointers είσαι σίγουρος ότι κατά λάθος δε 'σβήνεις' ένα Pointer 2 φορές? Ή ότι δεν χρησιμοποιείς έναν ελευθερωμένο? Δηλαδή μπορεί μεμονωμένα οι συναρτήσεις που έφτιαξες να είναι τέλειες αλλά όταν διαπλέκονται όλα μαζί κάπου να στραβώνει κάτι. Σου προτείνω να στραφείς προς αυτήν την κατέυθυνση. Προσπάθησε να παρακολουθήσεις τα δεδομένα σου.
ΥΓ. Όταν με το καλό το βρεις πες μου τι ήταν, έτσι για γνώση.
-
Ο χρήστης migf1 έγραψε:
Η C++ είναι βασικά υπερσύνολο της C, με βασική διαφοροποίηση την εγγενή υποστήριξη για classes και γενικώς object oriented programming. Έχει όμως μεγαλύτερο χρόνο εκμάθησης, αλλά το κυριότερο πολύ overhead.
Δεν διαφωνώ στο ότι η κάθε γλώσσα είναι καλύτερη για κάποιον συγκεκριμένο τομέα, δεν καταλαβαίνω όμως γιατί υποστηρίζεις πως η C δεν κάνει γενικώς για παραθυρικές εφαρμογές, τη στιγμή που όλα τα παραθυρικά περιβάλλοντα είναι κυρίως γραμμένα σε C.
Το καλύτερο είναι σχετικό, ξέρεις. Αν μετράει η επίδοση (ταχύτητα), το (μικρό) μέγεθος εκτελέσιμου κώδικα και γενικώς η βελτιστοποίηση πόρων, τότε η C είναι σαφώς καλύτερη.
Συμφωνώ σε αυτά που λες για την C++. Μάλιστα η ονομασία της είναι ατυχής, το ++ δεν μπορεί να υποδηλώσει διαφορά από τη C.
To ξέρω ότι πολλά παραθυρικά είναι γραμμένα σε C αλλά κάλλιστα θα μπορούσαν να είχαν γραφτεί απευθείας σε Αssembly (που προσφέρεται για ακόμα καλύτερη αξιοποιηση πόρων - λέεμε τώρα).
Απλά πιστεύω ότι δεν είναι και η πιο εύκολη/βολική/καλύτερη γλώσσα σε θέματα παραθυρικών όταν υπάρχουν οι άλλες.
Το θέμα αλλάζει αν εσύ ξέρεις να χειρίζεσαι άψογα τη C (και σε αυτό το τομέα). Επίσης έχει υπόψη σου ότι εγώ τώρα σπουδάζω και σαφώς δε μπορώ να έχω τις εμπειρίες σου αλλά ούτε και εσύ να ξέρεις τα του τι διδασκόμαστε.
Περί Η/Υ (+ ηλεκτρ. gadgets και νέας τεχνολογίας) [#1]