2016-04-03 6 views
-3
int main() 
{ 
    char* in = (char *)malloc(sizeof(char)*100); 
    in = "Sort of Input String with LITERALS AND NUMBERS\0"; 
    free(in); 
    return 0; 
} 

なぜこのコードがこのエラーで機能しないのですか?Cでfree()が動作しないのはなぜですか?

pointers(10144,0x7fff78a82000) malloc: *** error for object 0x10ba18f88: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
bash: line 1: 10144 Abort trap: 6   '/Users/.../Documents/term2_sr/pointers' 
[Finished in 0.1s with exit code 134] 

答えて

3

inin = "Sort of ...";によって再割り当てされているので。

実際には、free("Sort of ...");を実行していますが、これは明らかに違法です。

+0

'in'は名前付きポインタ変数です。したがって、それは再割り当てされません。また、文字列リテラルは(再)割り当てられていません。 – Olaf

+0

@Olaf申し訳ありませんが、 "再割り当て" –

2

inはポインタです。 malloc()で設定した後、リテラルを指すように変更します。次に、このpoitnerをlitteral(ヒープ上に割り当てられていないため、free()が失敗する)に解放しようとします。

strncpy (in, "Sort of Input String with LITERALS AND NUMBERS", 100); 
:consideationにその最大の長さを取って、あなたはまた、文字列をコピーすることができ、不慮のバッファオーバーフローを避けるために、

char* in = malloc(sizeof(char)*100); 
strcpy (in, "Sort of Input String with LITERALS AND NUMBERS"); 
free(in); 

実際順に:

は、あなたが strcpy()を使用する必要があり、文字列をコピーするには
関連する問題