2016-04-03 24 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; 
} 

爲什麼這段代碼不能處理這個錯誤?爲什麼free()在C中不起作用?

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()來設置它,你稍後將它改爲指向一個文字。然後你嘗試將這個盜賊解放出來(它從來沒有被分配到堆上,所以導致free()失敗)。

要複製一個字符串,你必須使用strcpy()

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

實際上,爲了避免意外的緩衝區溢出,你也可以複製字符串,同時考慮到consideation其最大長度:

strncpy (in, "Sort of Input String with LITERALS AND NUMBERS", 100); 
相關問題