μεταβλητες

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 16 Ιούλ 2010 13:53

Γεια χαρά,

Θα ήθελα να ρωτήσω μέχρι τι τιμές μπορούν να πάρουν οι μεταβλητές int,long int,long long,unsigned long long. Στον αλγόριθμο που έχω, από κάποια τιμή και πάνω που δίνει ο χρήστης φαίνεται σα να μην τελειώνει ποτέ. Στην αρχή είχα int και έβαλα long long αλλά δεν βλέπω διαφορά. Πώς μπορεί μέχρι κάποια τιμή να δίνει σωστά αποτελέσματα αλλά από κάποια τιμή και πάνω να μην τελειώνει το πρόγραμμα ή να βγάζει λάθος? Χρησιμοποιώ την Dev C.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 16 Ιούλ 2010 14:36

Επίσης να πω ότι χρησιμοποιώ δυναμικους πίνακες (malloc). Δεν ξέρω αν παίζει κάποιο ρόλο αυτό.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 16 Ιούλ 2010 15:43

Και κάτι ακόμα που παρατήρησα. Πώς γίνεται για το ίδιο παράδειγμα όταν τυπώνει δίφορα ενδιάμεσα στάδια να καταλήγει σε σωστό αποτέλεσμα, ενώ όταν το βάλω να βγάλει κατευθείαν το τελικό αποτέλεσμα, δεν τελειώνει ποτέ?

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

μεταβλητες

Δημοσίευση από Erevis » 16 Ιούλ 2010 17:48

Αν δε ποστάρεις κώδικα είναι λίγο δύσκολο να σε βοηθήσουμε.
If java had true garbage collection, programs would delete themselves upon execution.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

μεταβλητες

Δημοσίευση από virxen75 » 17 Ιούλ 2010 01:01

δες εδώ
www.cplusplus.com/reference/clibrary/climits/

να και ένα παράδειγμα για τους integers

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <limits.h>

int main&#40;&#41;&#123;
    printf&#40;"\n max int=%d min int=%d",INT_MAX,INT_MIN&#41;;
    getchar&#40;&#41;;
    return 0;
&#125;

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 17 Ιούλ 2010 14:59

Ευχαριστώ. Άρα η Int μου κάνει. Οπότε αλλού είναι το πρόβλημα. Ο αλγόριθμος είναι μεγάλος γι' αυτό δεν τον ποστάρω. Και επιπλέον θέλω να το ψάξω λίγο μόνος μου και στην έσχατη περίπτωση θα επανέλθω με τον αλγόριθμο. Κάνω τώρα κάτι δοκιμές και όταν κάνω compile βγάζει τα εξής:
[Warning] assignment makes pointer from integer without a cast
[Warning] comparison between pointer and integer

Τι σημαίνουν αυτά?

alex599
Δημοσιεύσεις: 66
Εγγραφή: 17 Δεκ 2008 01:11
Τοποθεσία: Πάτρα

μεταβλητες

Δημοσίευση από alex599 » 17 Ιούλ 2010 16:08

αυτό που λένε..

1) θέλει type casting για να παίξει η γραμμή που έχει το λάθος (λογικά σε malloc)
2) προσπαθείς να συγκρίνεις τιμή με διεύθυνση.
while(!dead()) ++knowledge;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

μεταβλητες

Δημοσίευση από virxen75 » 18 Ιούλ 2010 01:17

για στείλε τις γραμμές κώδικα που χρησιμοποιείς την malloc

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 18 Ιούλ 2010 11:01

Οκ το βρήκα το πρόβλημα. Και κάτι άλλο που θέλω να ρωτήσω. Για μεγάλες τιμές που δίνονται από τα δεδομένα, μου βγάινει το εξής μήνυμα:

Application error
The instruction at "0x00401f20" referenced memory at "0x00028ed0". The memory could not be "written".

Τι σημαίνει αυτό?
Σας ευχαριστώ για τον χρόνο σας.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 18 Ιούλ 2010 12:05

Κι άλλο ένα μήνυμα που δεν καταλαβαίνω:

Illegal System DLL Relocation
The system DLL user32.dll was relocated in memory. The application will not run properly.The relocation ocurred because the DLL Dynamically Allocated Memory occupied an address range reserved for Windows system DLLs. The vendor supplying the DLL should be contacted for a new DLL.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 18 Ιούλ 2010 12:07

Και μετά:
The instruction at "0x00401f5f" referenced memory at "0x00199ab8".The memory could not be "written".

Όλα τα περίεργα τις τελευταίες 3 μέρες τα βλέπω

alex599
Δημοσιεύσεις: 66
Εγγραφή: 17 Δεκ 2008 01:11
Τοποθεσία: Πάτρα

μεταβλητες

Δημοσίευση από alex599 » 18 Ιούλ 2010 12:21

Δώσε μας λίγο κώδικα να δούμε γτ σου βγάζει αυτά τα μηνύματα. Έτσι, δεν μπορούμε να σου πούμε με σιγουριά γιατί σου τα βγάζει.
while(!dead()) ++knowledge;

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

μεταβλητες

Δημοσίευση από bill777 » 18 Ιούλ 2010 16:52

Νομίζω ότι το πρόβλημα είναι η μνήμη, την οποία πρέπει να αποδεσμεύει. Αλλά έχω την εξής απορία:
Κάνω δυναμική δέσμευση μνήμης και στην πορεία του αλγορίθμου θέλω να την μικρύνω για οικονομία. Πρόκειται για δισδιάστατο πίνακα.Δεν ξέρω όμως πώς γίνεται. Νόμιζα ότι ήταν κάπως έτσι:

x=(int**)malloc(a*sizeof(int*));
for (i=0;i<a;i++)
{
x=(int*)malloc(b*sizeof(int));
}
...................................
x=(int**)realloc(x,c*sizeof(int*))
for (i=0;i<c;i++)
{
x=(int*)realloc(x,b*sizeof(int));
}


αλλά μάλλον δεν έιναι απ' ότι φαίνεται. Επίσης ισχύει ότι:
c<a. H δεύτερη διάσταση του πίνακα b μένει ίδια

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες