void separator_clean(char** text, char* separator){
int i = 0, j = 0, check = 0, k = 0;
char *str, *buffer;
while (i<STR){
str = (char*)malloc(sizeof(char));
*str = '\0';
buffer = (char*)malloc(sizeof(char));
*buffer = '\0';
strcpy(str, *(text+i));
j = 0;
check = 0;
while (*(str+j) != '\0'){
buffer = (char*)malloc(sizeof(char));
*buffer = '\0';
if (strchr(separator, *(str+j)) != NULL){
check++;
}
else {check = 0;}
if ((check > 1)){
*(str + j - 1) = *separator;
strncat(buffer, str, j);
printf("#BUF:%s\n", buffer);
strcat(buffer, str + j+1);
printf("#BU2:%s\n", buffer);
strcpy(str, buffer);
printf("#STR:%s\n", str);
k = 0;
j--;
}
j++;
//free(buffer);
}
strcpy(*(text + i), str);
printf("STR:%s\n", str);
printf("TEX:%s\n", *(text+i));
printf("BUF:%s\n", buffer);
i++;
//free(str);
}
}
Функция получает массив текста(text), и массив разделителей(separator). Выполняет операции построчно, через str.
Она заменяет несколько подряд идущих разделителей на первый в массиве разделителей. Работает правильно, но возникает проблема с памятью, если строка достаточно длинная. При освобождении памяти(закоментированные строчки), программа выдает ошибку: "Has triggered a breakpoint.".
Объясните в чем проблема?