I don't understand why I m am getting a segmentation fault inside the free_memory function. Here is the program:
#include <stdio.h> #include <stdlib.h> #include <string.h> void allocate_memory (char **cells) { int i; cells = (char **) malloc(9 * sizeof(char *)); if (cells == NULL) { perror("Couldn't allocate memory"); exit(1); } for (i = 0; i < 9; i++) { cells[i] = (char *) malloc(9 * sizeof(char)); if (cells[i] == NULL) { perror("Couldn't allocate memory"); exit(1); } memset(cells[i], 1, 9); } } void free_memory (char **cells) { int i; for (i = 0; i < 9; i++) { free(cells[i]); } free(cells); } int main (int argc, char *argv[]) { char **cells = NULL; allocate_memory(cells); printf("Allocated\n"); free_memory(cells); return 0; } The debugger shows this message about the error:
Process 1433 launched: '/Users/Jaime/Documents/workspaceC/PruebasC/PruebasC/sk' (x86_64) Allocated Process 1433 stopped * thread #1: tid = 0x1058a, 0x0000000100000e95 sk`free_memory + 37, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0) frame #0: 0x0000000100000e95 sk`free_memory + 37 sk`free_memory: -> 0x100000e95 <+37>: movq (%rcx,%rax,8), %rdi 0x100000e99 <+41>: callq 0x100000f20 ; symbol stub for: free 0x100000e9e <+46>: movl -0xc(%rbp), %eax 0x100000ea1 <+49>: addl $0x1, %eax I hope anyone can help me, I don't get why I am accessing a bad pointer.