Ошибка сегментации при присвоении char * - PullRequest
0 голосов
/ 22 октября 2011

Итак, я пишу этот код здесь, и я просто хочу, чтобы функция возвращала массив символов и присваивала его переменной в основной функции. Вот функция, возвращающая символ *

char* getString(pid_t pid, long address, long length) 
{ 
    char* str =  (char *)malloc((length+1) * sizeof(char));
    int i =0;

    while (i < length)
    {
        char t = ptrace(PTRACE_PEEKDATA,pid,address+i,0); 
        str[i] = t; 
        i++;
    }
    //  str[length] = '\0';
    printf(" Exiting getString %s \n ", str);
    return str;
}

А вот что я делаю в основном

int main { 
    ... 
    ...  
    char* st = getString(pid, arguments[1], arguments[2]); // causes seg fault 
    // printf("getstring %s\n", getString(pid, arguments[1], arguments[2])); works fine
    // and produces correct output 
    return 1;
}

В последнее время я мало что сделал в C, так что, может быть, я что-то упустил, но почему printf работает и назначение не выполняется? Может кто-нибудь сказать мне, что я здесь делаю не так?

1 Ответ

4 голосов
/ 22 октября 2011

Вы закомментировали строку в вашей функции, где вы завершаете строку нулем.

Тот факт, что в одном случае в main() возникают ошибки только в одном случае, - просто удача (неопределенное поведение); Вы также вызываете printf() в своей функции.

...