1.Μήπως σταματά σε σημείο που το p δε δείχνει κάπου;
2.Αυτό είχα κάνει όσο δε λειτουργούσε η sizeof αλλά και εκείνο δεν μου δούλεψε οπότε είπα να φτιάξω τη δική μου συνάρτηση,μάταια.Τώρα όμως οκ.
Ευχαριστώ πολύ.
ΥΓ: Όταν το τελειώσω θα το αναρτήσω.
Συντονιστής: konnn

void *malloc(size_t size);void *my_malloc(size_t size)
{
void *s = malloc(size);
if (!s) {
puts("error: out of memory");
exit(EXIT_FAILURE);
}
return s;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a;
a = malloc(3 * sizeof(int));
a[0] = 4;
a[1] = 3;
a[7] = 14;
printf("%d\n", a[7]);
return 0;
}

Ilias95 έγραψε:Γεια χαρά,
έγραψε:Τελείωσα το κεφάλαιο 17 και έχω κάποιες απορίες.
Τις παραθέτω.
1. Το παρακάτω είναι το prototype της malloc:
- Κώδικας: Επιλογή όλων
void *malloc(size_t size);
Τι ακριβώς καταλαβαίνουμε από αυτό για τον τύπο που επιστρέφει η malloc;
Είναι ένας pointer σε τι; Είναι μήπως ένας pointer που μπορεί να δείχνει σε οποιονδήποτε τύπο;
έγραψε:2. Είναι η παρακάτω σωστή λύση για την 1η άσκηση της σελίδας 453;
- Μορφοποιημένος Κώδικας: Επιλογή όλων
void *my_malloc(size_t size)
{
void *s = malloc(size);
if (!s) {
puts("error: out of memory");
exit(EXIT_FAILURE);
}
return s;
}
Σε real-life εφαρμογές συνηθίζεται να γίνεται χρήση παρόμοιων συναρτήσεων;
έγραψε:
3. Το παρακάτω sample μου δίνει έξοδο 14:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a;
a = malloc(3 * sizeof(int));
a[0] = 4;
a[1] = 3;
a[7] = 14;
printf("%d\n", a[7]);
return 0;
}
Πως γίνεται να δουλεύει σωστά; Αφού υποτίθεται ότι η a έχει δεσμευμένο χώρο για 3 στοιχεία.
Δουλεύει κατά τύχη ή συμβαίνει κάτι άλλο;


Ilias95 έγραψε:Κατάλαβα, ευχαριστώ για τις απαντήσεις.
Μία ακόμα απορία.
Αν ο προγραμματιστής δεν φροντίσει να απελευθερώσει την μνήμη που δέσμευσε δυναμικά μέσα απ' το πρόγραμμα πριν αυτό τερματίσει ποιες μπορεί να είναι οι συνέπειες;
έγραψε:Επίσης κάτι άλλο σχετικά με την άσκηση που υπάρχει στο τέλος των σημειώσεων εδώ: http://x-karagiannis.gr/prog/libs/conte ... lists6.php
Είναι εντάξει να θεωρήσουμε ότι οι λέξεις θα έχουν ένα standar max μήκος ή μπορούν να έχουν οποιοδήποτε μήκος και το πρόγραμμα πρέπει να δουλεύει σωστά ακόμα και εάν ο χρήστης δώσει μία λέξη 200 χαρακτήρων;

migf1 έγραψε:Κάνε το αρχικά όπως λες.
#include <stdio.h> // printf(), puts(), scanf(), putchar()
#include <stdlib.h> // malloc(), free(), exit(), EXIT_SUCCESS, EXIT_FAILURE
#include <string.h> // strcmp(), strcpy()
#include <ctype.h> // tolower()
#define LEN_WORD (30+1)
#define LEN_ALPHABET 26
typedef struct node {
char word[LEN_WORD];
struct node *next;
} Node;
typedef struct {
Node *head;
int len;
} List;
Node *add_to_list(Node *n, char *s)
{
Node *new_node = malloc(sizeof(Node));
if (new_node == NULL)
return NULL;
strcpy(new_node->word, s);
new_node->next = n;
return new_node;
}
void list_print(Node *n)
{
for (; n != NULL; n = n->next)
printf("%s ", n->word);
putchar('\n');
}
void list_destroy(Node *n)
{
if (n == NULL)
return;
Node *dummy = NULL;
for (; n != NULL; n = dummy) {
dummy = n->next;
free(n);
}
}
void lowerize(int n, char s[n])
{
for (int i = 0; i < n; i++) {
s[i] = tolower(s[i]);
if (!s[i])
return;
}
}
int main(void)
{
char word[LEN_WORD];
List alphabet[LEN_ALPHABET];
for (int i = 0; i < LEN_ALPHABET; i++) {
alphabet[i].head = NULL;
alphabet[i].len = 0;
}
for (;;) {
scanf("%s", word);
lowerize(LEN_WORD, word);
int c = word[0] - 'a';
if (c < 0)
c = 0;
else if (c > LEN_ALPHABET)
c = LEN_ALPHABET;
alphabet[c].head = add_to_list(alphabet[c].head, word);
if (alphabet[c].head == NULL)
goto exit_failure;
alphabet[c].len++;
if (!strcmp(word, "stop"))
break;
}
int num_words = 0;
putchar('\n');
for (int i = 0; i < LEN_ALPHABET; i++) {
if (alphabet[i].len) {
printf("%c (%d words): ", i + 'a', alphabet[i].len);
list_print(alphabet[i].head);
num_words += alphabet[i].len;
list_destroy(alphabet[i].head);
}
}
printf("\nyou have typed %d words in total (including \"stop\")\n", num_words);
exit(EXIT_SUCCESS);
exit_failure:
for (int i = 0; i < LEN_ALPHABET; i++)
list_destroy(alphabet[i].head);
exit(EXIT_FAILURE);
}




migf1 έγραψε: κενή γραμμή αντί για λέξη
migf1 έγραψε: λέξεις σε ελληνικά
migf1 έγραψε:λέξεις μεγαλύτερου μήκους από ότι περιμένε
