我不明白爲什麼我要在free_memory函數內部發生分段錯誤。下面是程序:不能理解這個錯誤,同時釋放內存中的內存C
#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;
}
調試器顯示該消息有關錯誤:
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
我希望有人能幫助我,我不明白爲什麼我訪問一個壞的指針。
(HTTP [從標準使用與fgets()讀取]的可能重複: //stackoverflow.com/questions/40412010/reading-from-stdin-using-fgets) –