2012-04-08 5 views
-1

Я пишу функцию, которая возвращает первые символы n (n <= strlen(src)).Почему этот код вызывает ошибку сегментации?

char* substring(char *src, int n) 
{ 
    char *substr; 
    int i; 
    for (i = 0; i < n; i++) 
    *substr++ = *src++; 
    src = src - n; 
    *substr = '\0'; 
    return substr - n; 
} 

Эта функция возвращает правильный ответ при вызове только один раз, но возвращает Seg Fault при его вызове более одного раза.

ответ

5

памяти не выделяется substr и, следовательно, функция deferences неинициализированного указателя и запись в память, где не предполагается, что приводит к непредсказуемому поведению . Тот факт, что он работает в первый раз, - это полный шанс.

Выделяем память для substr:

char* substr = malloc(n + 1); /* Plus one for null teminator. */ 

Обратите внимание, что вызывающий substring() должен free() возвращенный буфер.

0

Вам необходимо выделить память для char * substr в вашей подстрочной функции. В настоящий момент вы собираете память, которая вызывает segfaults. Простой: char * substr = (char *) malloc (sizeof (char) * n + 1); должен сделать трюк.

Смежные вопросы