Δημοσιεύτηκε: 08 Απρ 2012, 14:26
Μόλις ξεκίνησα να διαβάζω το κεφάλαιο 17 για την δυναμική διαχείριση μνήμης.
Μια απορία που προκύπτει μέχρι στιγμής είναι η παρακάτω.
Το παραπάνω παράδειγμα δίνει segmentation fault και είχαμε εξηγήσει στο παρελθόν ότι αυτό συμβαίνει λόγο του ότι ο pointer p δείχνει σε read-only περιοχή μνήμης.
Όμως το παρακάτω παράδειγμα:
δουλεύει κανονικά...
Τι συμβαίνει στην προκειμένη; Ο p αρχικά δείχνει σε read-only περιοχή και μετά σε μη read-only;
Μια απορία που προκύπτει μέχρι στιγμής είναι η παρακάτω.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
int main(void)
{
char *p = "Ena string.";
p[1] = 'o';
puts(p);
return 0;
}
Το παραπάνω παράδειγμα δίνει segmentation fault και είχαμε εξηγήσει στο παρελθόν ότι αυτό συμβαίνει λόγο του ότι ο pointer p δείχνει σε read-only περιοχή μνήμης.
Όμως το παρακάτω παράδειγμα:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// concatenates two strings
char *concat (const char *s1, const char *s2)
{
char *result;
result = malloc(strlen(s1) + strlen(s2) + 1);
if (result == NULL) {
printf("Error: malloc failed in concat\n");
exit(EXIT_FAILURE);
}
strcpy(result, s1);
strcat(result, s2);
return result;
}
int main(void)
{
char *p;
p = concat("Ena st", "ring.");
p[1] = 'o';
puts(p);
return 0;
}
δουλεύει κανονικά...
Τι συμβαίνει στην προκειμένη; Ο p αρχικά δείχνει σε read-only περιοχή και μετά σε μη read-only;