なぜ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
私は誰も私を助けることを願って、私が悪いのポインタをアクセスしていますが、なぜ、私は得ることはありません。
[関数fgets()を使用して標準入力からの読み込み]の可能性のある重複します(http: //stackoverflow.com/questions/40412010/reading-from-stdin-using-fgets) –