Три проблемы:
1) Вы должны выделить дополнительный байт для нулевого терминатора целевой строки:
table[i].str = malloc(2);
2) Вы должны передать указатель на источник в strcpy (это, вероятно, вызвало ваш segfault):
strcpy(table[i].str,&temp);
3) Исходная строка должна заканчиваться нулем, чего нет в вашем коде. Это не легко исправить напрямую. Но вам все равно не нужен strcpy (), просто установите два байта напрямую:
table[i].str[0] = i;
table[i].str[1] = 0;
Тогда все должно работать так, как вы ожидаете.