2011-10-22 4 views
0

ここでこのコードを書いています。文字配列を返し、main関数の変数に代入する関数が必要です。ここでのchar *char *への代入時のセグメンテーションフォールト*

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関数が何をするかです仕事と割り当てが失敗?誰かが私がここで間違っていることを教えてもらえますか?

答えて

4

あなたの文字列をnullで終了する関数内の行をコメントアウトしました。

main()の1つのケースでは、segfaultsのみということは単なる運があります(未定義の動作)。あなたの関数でもprintf()と呼んでいます。

+0

oops。どのように私はそれを見ていませんでした...それを指摘するためのtnx! –

関連する問題