Это означает, что ваш код нарушил некоторые ограничения, установленные операционной системой, в этом случае вы пишете в память, к которой у вас нет прав записи.
Это потому, что ваша переменная temp
является просто неинициализированным указателем, она не содержит адрес памяти, куда вы можете писать.
Если вы планируете писать length + 1
символов, оно должно указывать как минимум на столько байтов пространства.
Поскольку вы ожидаете вернуть строку, вам нужно либо сделать ее static
(но это может быть опасно), либо динамически распределить пространство:
if((temp = malloc(length + 1)) == NULL)
return NULL;