메모리 할당 문제가 있습니다. else
블록 내에 char*
을 선언하면 else
블록이 실행될 때 char*
이 삭제된다는 것을 의미합니다. else
블록은 while
루프에 있으므로 여러 번 반복됩니다. 그러나 else
블록에 선언 된 char*
이 아래 예제에서와 같이 malloc'd
변수의 별칭이되면 어떻게됩니까? 제 질문은 어떻게 이런 수수료를내는 겁니까? 나는 임시 변수 char*
을 해제하는 것처럼 느낍니다. 유지하려고하는 변수를 해제 할 것이기 때문에 세그먼트 오류가 발생할 것입니다. 그렇다면, 나는 free
진술서가 어디로가는 지 손해를보고 있습니다.메모리 할당 C
char* print_path = NULL;
내가 다시 실행되지 않습니다 알고 후 프로그램의 끝에서 나는 무료 print_path을 지적하고 싶습니다
(싹둑)
(while)
else{
char* temp_path = print_path;
int temp_size = strlen(temp_path)+strlen(file_name(child->fts_path))+1;
print_path = (char*)malloc(temp_size);
strcpy(print_path, temp_path);
strncat(print_path, file_name(child->fts_path), strlen(file_name(child->fts_path)));
printf("%s:\n\n", print_path);
}
이 (싹둑) . 그러나 내가 풀어보고 싶은 루프의 중간 실행이다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다.
스택 할당 및 힙 할당이 혼란 스럽습니다. 포인터를 비우지 않으면 포인터가 가리키는 메모리가 해제됩니다. –
루프를 반복 할 때마다 해제되는 점은 무엇입니까? 루프의 지속 기간 동안 메모리 세그먼트가 필요하다는 것을 알고 있습니다. 해제 및 재 할당은 여기에서별로 의미가 없습니다. –
@JordanKaye 모든 반복 작업 동안 해방의 포인트는 이전 반복의 동적으로 할당 된 변수가 더 이상 필요하지 않기 때문입니다. 데이터 샘플이 길어지면 메모리가 남아 있지 않습니다. 더 이상 필요하지 않을 때 모든 malloc 된 변수를 해제하는 것도 좋은 프로그래밍 연습입니다. – tpar44