2013-10-08 2 views
0

Я пытаюсь добавить строку в другую, и я получаю ошибку seg и не могу понять, что я делаю неправильно.Seg Fault при попытке добавить строки

typedef char * String; 
String function(String str) { 
    // Some variables here 
    String current = ""; 
    String ch = ""; 

    //More code here 
    while() { 
     if() { 
      current = malloc(strlen(current) + strlen(ch) + 1); 
      strcat(current, ch); 
     } 
    ... 
    } 
} 

я получаю ошибку сегм даже с strcat линии закомментированного, и наоборот, с malloc линии. Это, вероятно, что-то больно очевидное, что я пропал без вести, но кто-нибудь может объяснить, как это сделать, правильно сделайте это и объясните, что я сделал неправильно?

+0

Ток не завершен nul после malloc. – zubergu

ответ

1

current не «\ 0» прекращается после того, как malloc
strcat ищет для этого символа, чтобы знать, куда добавлять и это делает ошибку сегментации
..
Ваша предыдущая инициализация current не имеет значения после того, как malloc возвращает, это указывает на совершенно другую часть неинициализированной памяти.
Не могу точно сказать, но из того, что вы предоставили, мой совет должен использовать realloc для увеличения размера current.

1

После вашего malloc вы забываете заполнить новую выделенную строку предыдущим содержимым current - и вы не можете этого сделать, потому что вы потеряли ссылку на нее (далее вы интрументируете утечку памяти, потому что вы не освобождаете . это Попробуйте realloc вместо этого - но сначала выделить current с malloc