I don’t understand why, in this code, the call to “free” cause a segmentation fault:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *char_arr_allocator(int length);
int main(int argc, char* argv[0]){
char* stringa = NULL;
stringa = char_arr_allocator(100);
printf("stringa address: %p\n", stringa); // same address as "arr"
printf("stringa: %s\n",stringa);
//free(stringa);
return 0;
}
char *char_arr_allocator(int length) {
char *arr;
arr = malloc(length*sizeof(char));
arr = "xxxxxxx";
printf("arr address: %p\n", arr); // same address as "stringa"
return arr;
}
Can someone explain it to me?
Thanks,
Segolas
You are allocating the memory using
malloccorrectly:then you do this:
this will cause
arrpoint to the address of the string literal"xxxxxxx", leaking yourmalloced memory. And also callingfreeon address of string literal leads to undefined behavior.If you want to copy the string into the allocated memory use
strcpyas: