문자열의 부분 해제 어레이 I는 예를 들어, 이미 free되기를 일부되는 문자열의 배열을 가지고 있다고 가정 ? 나는 여전히 메모리 누수가있는 것 같기 때문에, 내 경우에있어서 은 이미 9 개가 해제 된 20 개의 문자열 배열이다.무료() C
"해제 된"문자열을 해제하는 방법은 궁금합니다. 도움에 감사드립니다!
문자열의 부분 해제 어레이 I는 예를 들어, 이미 free되기를 일부되는 문자열의 배열을 가지고 있다고 가정 ? 나는 여전히 메모리 누수가있는 것 같기 때문에, 내 경우에있어서 은 이미 9 개가 해제 된 20 개의 문자열 배열이다.무료() C
"해제 된"문자열을 해제하는 방법은 궁금합니다. 도움에 감사드립니다!
"해제 된"문자열을 해제하는 방법은 궁금합니다.
글쎄, 그렇지 않아. free
마다 malloc
을 정확하게 입력해야합니다. 동일한 문자열에서 free
을 여러 번 호출하면 정의되지 않은 동작이 발생합니다. 여기
array[i]='\0';
, 당신 free
그 전에 포인터의 값을 덮어 쓰는 : 제쳐두고, 당신의 문제는 다음이다
.
또한 array [i]가 malloc되지 않았습니다. 배열 만 malloc되었습니다. 그것을 풀면 아마도 충돌이 발생할 것입니다. – cup
... 그리고 문자열이 아닌 문자가 할당되었습니다 –
1 malloc()
할당하려면 메모리를 할당 해제하려면 1 free()
이 필요합니다. 따라서 free(array);
은 메모리를 할당 해제하기에 충분합니다.
free()
메모리 할당 해제는 malloc()
을 사용하여 할당 된 메모리와 동적으로 대응합니다.
아니요. 'free (array)'는 '메모리 할당 해제'를하지 않고 단지 포인터의 배열을 해제하지만 배열의 항목이 가리키는 문자열은 해제하지 않습니다. – CiaPan
일반적으로 free
- 이후 포인터는 NULL
으로 설정해야합니다. 그런 다음 포인터가 NULL
인지 확인해야합니다. 그렇지 않으면 free
수 있습니다. 그렇게하면 어떤 것이 free
-ed인지 어느 것이 없는지 추적 할 수 있습니다.
무료 (array [i]); 이전 행에서 값 (포인터)을 변경 한 포인터를 해제하려고 할 때 문제/이상한 오류가 발생합니다.
코드 array [i] = '\ 0';
은 문자 값이 아닌 포인터 값을 설정하므로 원하는 결과를 얻지 못할 수 있습니다. 아마도 sprintf (array [i], "\ 0");
if (array[i]!=NULL)
{
free(array[i]);
array[i] = NULL;
}
이 컴파일 않는다 (위와 동일하지만,이 NULL에 해제 변수를 강제로 포함되어 있음을 의미) :
당신은로 IF 문을 확장 할 수 더 나은 것입니까? 배열의 선언은 무엇입니까? –
char ** 배열; array = malloc (20 * sizeof (char *)); – Pavoo
그래서 작은 따옴표가 붙은 이유는 무엇입니까? –