2016-09-15 58 views
-2

我想要做的是分配一個char** stringarrc:免費char *,不破壞字符**

在一些地方,stringarr[index],我想分配一個char*。 所以我想在char **的一些地方保存字符串(char*)。 例如後的程序運行:

stringarr[0] = "Hello", stringarr[1] = "goodbye" 

的問題是,我想釋放char *拿着琴絃,但是當我做當然stringarr[0]不再將指向釋放char*

我該如何解決這個問題?

澄清: 我想將字符串(char *)添加到字符串數組(char **)。然後我釋放字符串,但不是字符串數組。我怎麼能做到這一點,而不影響char **?

+2

_請澄清您的具體問題或添加額外的細節,以確切地突出你所需要的。正如目前所寫,很難確切地說出你在問什麼。請參閱如何解答此問題的幫助頁面._ –

+0

[如何詢問頁面](http://stackoverflow.com/help/how-to-ask) – gavv

+0

上述代碼將'stringarr [0]'設置爲指向到一個不能被釋放的字符串文字。你可以做的最多的是將'stringarr [0]'設置爲別的東西,比如'NULL'。相反,如果你做類似'char * foo = malloc(10); strcpy(foo,「fred」); stringarr [0] = foo;',然後你調用'free(foo)',它取決於你的代碼以確保它不會訪問'stringarr [0]'所指向的緩衝區。你是如何完成的,取決於你。確保您的代碼在釋放'foo'後重置'stringarr [0] = NULL;並始終檢查'stringarr [0]'是否爲NULL,是實現它的一種方法。 –

回答

1

通常的方式來處理,這是分配NULL到釋放的指針(S):

free(stringarr[3]); 
stringarr[3] = NULL; 

您仍然可以訪問其他字符串stringarr(但不stringarr[3]),你可以檢查是否有特定通過檢查是否爲NULL來確定空位。

+0

這可能如何工作?我有char ** stringarr,在地方stringarr [0]我有一個char * tmp。然後我釋放stringarr [0]並將其設置爲NULL?還有我的字符串在0和字符串被釋放? – p3ob2lem

+0

你想保留字符串?然後,不要釋放它們或使用'strdup'來創建一個副本。 –

+0

是的,我想保留stringarr中的字符串,因爲我從方法返回了stringarr。 – p3ob2lem