2016-09-15 47 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