Δημοσιεύτηκε: 27 Ιούλ 2011, 12:03
Έκανα κάποιες μικρές αλλαγές στον κώδικα και το αποτέλεσμα είναι πλέον το επιθυμητό αλλά κάνω λάθος με την δυναμική διαχείριση μνήμης και δεν μπορώ να το εντοπίσω
Το πρόγραμμα έχει ως σκοπό περιλιπτικά:
1)Να διαβαστούνε ΜΑΧWORDS λέξεις(strings) που θα αποθηκευτούνε σε έναν πίνακα από pointers σε char
2)Να υπολογιστεί το "μήκος" που καταλαμβάνουνε
3)Να εκχωρηθούνε σε ένα νέο string στο οποίο θα έχουνε μεταξύ τους ένα κενό και να τυπώνεται το αποτέλεσμα στην οθόνη
Το έχω καταφέρει αλλά όταν πάω να αποδεσμέυσω την δεσμευμένη μνήμη τότε το πρόγραμμα τερματίζει απότομα και εμφανίζονται διάφορα ψηφία και στο τέλος ένα ωραίο Aborted.
παραθέτω τον κώδικα(συγγνώμη αν κουράζω)
Το πρόγραμμα έχει ως σκοπό περιλιπτικά:
1)Να διαβαστούνε ΜΑΧWORDS λέξεις(strings) που θα αποθηκευτούνε σε έναν πίνακα από pointers σε char
2)Να υπολογιστεί το "μήκος" που καταλαμβάνουνε
3)Να εκχωρηθούνε σε ένα νέο string στο οποίο θα έχουνε μεταξύ τους ένα κενό και να τυπώνεται το αποτέλεσμα στην οθόνη
Το έχω καταφέρει αλλά όταν πάω να αποδεσμέυσω την δεσμευμένη μνήμη τότε το πρόγραμμα τερματίζει απότομα και εμφανίζονται διάφορα ψηφία και στο τέλος ένα ωραίο Aborted.
παραθέτω τον κώδικα(συγγνώμη αν κουράζω)
- Κώδικας: Επιλογή όλων
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXWORDS 5
#define WORDSIZE 20
void check_memory(char *); //Dilosi sunartisis pou kanei elegxo gia tin dunamiki diaxeirisi mnimis//
void clear_memory(char *, char **); //Dilosi sunartisis pou apeleu8eronei tin dynamika deusmeumeni mnimi//
int main (int argc, char *argv[]) {
int i,words_size;
char *words[MAXWORDS];
char *new_string;
words_size = 0;
for (i=0; i<MAXWORDS; i++) {
words[i] = (char *)malloc(sizeof(char)*WORDSIZE); //Dynamiki desmeusi mnimis//
check_memory(words[i]); //klisi sunartisis gia ton elegxo mnimis//
scanf("%s",words[i]); //eisagogi leksis apo ton xristi//
if( i < (MAXWORDS - 1) ) { //Elegxos oste na kataxori8ei stin new_string o apaitoumenos xoros//
words_size = strlen(words[i]) + 1;
}
else {
words_size = strlen(words[i]);
}
}
new_string = (char *)malloc(sizeof(char)*words_size); //Dynamiki desmeusi mnimis//
check_memory(new_string); //klisi sunartisis gia ton elegxo mnimis//
strcat(new_string,words[0]);
for (i=1; i<MAXWORDS; i++) { //Se auto to simio ''metaferontai'' ta stoixeia apo tin words stin new_string//
strcat(new_string," "); //oses lekseis einai diadoxikes exoune ena keno anamesa tous//
strcat(new_string,words[i]);
}
printf("%s\n ", new_string);
clear_memory(new_string,words);
return 0;
}
void check_memory(char *mem) {
if (mem==NULL) {
printf("Memory allocation error\n");
exit(1);
}
}
void clear_memory(char *string, char **words_cleanse){
int i;
free(string);
for (i=0; i<WORDSIZE; i++) {
free(words_cleanse[i]);
}
}