Вызвано исключение по адресу 0x0FF0EA10 (ucrtbased.dll) в 2209_1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFE4

наткнулся на проблему небольшую, хочу отсортировать массив символов предварительно динамически выделеным. Я в ф-цию передаю указатель на первый символ моего массива, но когда в ф-ции я хочу юзануть str[i] str[j] всё ломается пробовал просто пройтись по массиву, оно работает int i = 0;

int i = 0; while(str[i] != ''){ printf("%c", str[i]); i++;) }

Вот код на Си.

#define _CRT_SECURE_NO_WARNINGS  #include <Windows.h> #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h>  void quickSort(char* str, int left, int right);  int main() 	{ 	int n; 	printf("Enter size of string: "); 	scanf("%d", &n); 	char* str = (char*)malloc(sizeof(char) * (n)+4); 	printf("Enter your string : "); 	scanf("%s", str); 	quickSort(str, 0, n); 	printf("Sorted string : \n %i", str); 	free(str); 	system("pause"); }  void quickSort(char* str, int left, int right) { 	int i, j, p; 	i = left; 	j = right - 1; 	char tmp[100]; 	while (i != j) { 		if ((strcmp(str[i], str[j]) > 0) != (i < j)) 		{ 			strcpy(tmp, str[i]); 			strcpy(str[i], str[j]); 			strcpy(str[j], tmp);  			p = i; 			i = j;  			if (p < j) 				j = p + 1; 			else j = p - 1; 		} 		else 		{ 			if (i < j) j--; 			else j++; 		}; 	};  	if (left < i - 1) 		quickSort(str ,left, i - 1); 	if (i + 1 < right) 		quickSort(str, i + 1, right); }

сама проблема