2016-09-15 4 views
-2

내가 원하는 것은 char** stringarr입니다.c : char *를 지우지 않는 free char *

일부 지역에서는 stringarr[index], char*을 지정하고 싶습니다. 그래서 char **의 일부 위치에 문자열 (char*)을 저장하고 싶습니다.

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

문제는 내가 문자열을 들고 char *을 확보 할 것입니다,하지만 난 물론 stringarr[0]의 수행 할 때 더 이상 해제 char*를 가리 킵니다 : 예를 들어 은 프로그램이 실행되지 후.

어떻게 해결할 수 있습니까?

설명 : 문자열 배열 (char **)에 문자열 (char *)을 추가하고 싶습니다. 그런 다음 문자열을 해제하지만 문자열 배열은 해제하지 않습니다. char **에 영향을주지 않고 어떻게이 작업을 수행 할 수 있습니까?

+2

_ 특정 문제를 명확히하거나 추가 세부 정보를 추가하여 필요한 것을 정확하게 강조하십시오. 현재 작성된 내용이므로 귀하가 원하는 내용을 정확하게 말하기는 어렵습니다. How to Ask 페이지에서이 질문을 명확히하는 데 도움을 받으십시오 ._ –

+0

[How to Ask page] (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를 할당하는 것입니다 :

free(stringarr[3]); 
stringarr[3] = NULL; 
당신은 여전히 ​​ stringarr (그러나 stringarr[3])에 다른 문자열을 액세스 할 수 있으며 특정 여부를 확인할 수

NULL인지 확인하여 위치가 비어 있습니다.

+0

어떻게 이것이 가능합니까? 나는 char ** stringar를 가지고있다. stringarr [0] 나는 char * tmp를 가지고있다. 그렇다면 stringarr [0]을 해제하고 NULL로 설정합니까? 그리고 여전히 0에 문자열이 있고 문자열이 해제 되었습니까? – p3ob2lem

+0

문자열을 유지 하시겠습니까? 그렇다면 그것들을 풀거나'strdup'를 사용하여 사본을 만들지 마십시오. –

+0

예 메서드에서 stringarr을 반환하므로 문자열을 stringarr에 유지하고 싶습니다. – p3ob2lem