2015-01-26 6 views
-2

Я написал программу для конкат двух строк и убедитесь, что буфер удваивает размер, когда места недостаточно.как освободить память указателя в C

char * strcat_ex(char * * dest, int * n, const char * src){ 
    int dest_len = 0; 
    int src_len = 0; 
    if (*dest == NULL) *n = 0; 
    else dest_len = strlen(*dest); 
    if (src == NULL)  return *dest; 
    else src_len = strlen(src); 

    if (dest_len + src_len + 1 > *n) { 
     //(1) malloc a new buffer of size 1 + 2 * (strlen(*dest) + strlen(src)) 
     char * temp; 
     temp = (char*) malloc(1 + 2 * (strlen(*dest) + strlen(src))); 
     //(2) set '*n' to the size of the new buffer 
     *n = 1 + 2 * (strlen(*dest) + strlen(src)); 
     //(3) copy '*dest' into the beginning of the new buffer 
     strcpy(temp, *dest); 
     //(4) free the memory '*dest', and then set '*dest' to point to the new buffer 
     free(*dest); 
     *dest = temp; 
    } 
    //(5) concatenate 'src' onto the end of '*dest'. 
    while (temp) temp++; 
    while ((temp++ = src++) =! '\0'); 
    return *dest;} 

и этот код не работает. Я получил ошибку сегментации в «free (* dest)». Пожалуйста, помогите. Большое спасибо!

Вот основная функция:

int main(int argc, char * * argv){ 
    printf("\nTesting strcat_ex(...)\n"); 
    char * str1; 
    str1 = "one"; 
    char * str2; 
    str2 = "two"; 
    int n; 
    n = strlen(str1); 
    printf("Before strcat_ex, str1 == %p (%s), str2 == %p (%s)\n", str1, str1, str2, str2); 
    strcat_ex(&(str1), &n, str2); 
    printf("After swap, str1 == %p (%s), str2 == %p (%s)\n", str1, str1, str2, str2); 

return EXIT_SUCCESS; 

}

+0

попробуйте 'free (dest);' вместо –

+1

как объявлено и выделено dest? – bolov

+1

Вам нужно показать, как вызывается функция. – user3386109

ответ

0

Проблема заключается в том, что начальное значение str1 является указателем на строку символов. Этот указатель не может быть освобожден. Таким образом, исправление составляет malloc пространство в main, например.

char *str1 = malloc(100); // allocate an initial buffer 
int n = 100;     // the buffer has 100 bytes 
strcpy(str1, "one");  // put some text in the buffer 
Смежные вопросы