次のコードが動作することが期待されます。コンパイルすると(gcc)、実行はSegmentation fault: 11
になります。どうして?おかげ文字列のCセグメント化エラー
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_INDEX_LENGTH 20
main()
{
char **indici;
int n = 4;
indici = (char **)malloc(n * sizeof(char*));
int i;
for (i = 0; i < n; i++)
{
indici[i] = (char *)malloc(MAX_INDEX_LENGTH * sizeof(char*));
}
strncpy(indici[0], "aaa", MAX_INDEX_LENGTH);
strncpy(indici[0], "bbbb", MAX_INDEX_LENGTH);
strncpy(indici[0], "ccccc", MAX_INDEX_LENGTH);
strncpy(indici[0], "ddddddd", MAX_INDEX_LENGTH);
for (i = 0; i < n; i++)
{
printf("Index %d is %s\n", n, indici[n]);
}
}
有用な回答がまだ投稿されていますが、実際に私が推測したいものであるMAX_INDEX_LENGTH * sizeof(char)の代わりにMAX_INDEX_LENGTH * sizeof(char *)を割り当てていることを指摘したいと思います。 –