반응형
C에서 2d 배열을 자유롭게 하는 방법?
다음 코드가 있습니다.
int **ptr = (int **)malloc(sizeof(int*)*N);
for(int i=0;i<N;i++)
ptr[i]=(int*)malloc(sizeof(int)*N));
어떻게 하면 자유로워질 수 있을까요?ptr
사용.free
? 내가 돌아볼까요?ptr
무료로ptr[i]
아니면 그냥 할까요?
free(ptr)
그리고.ptr
자유로워질까요?
할당과 정반대:
for(int i = 0; i < N; i++)
free(ptr[i]);
free(ptr);
당신은 뒤로 돌아야 할 것입니다.ptr[i]
, 각자 해방시키기int*
당신이 처음 제안했던 것처럼 당신이 횡단한다는 것.예를 들어,
for (int i = 0; i < N; i++)
{
int* currentIntPtr = ptr[i];
free(currentIntPtr);
}
그래요, 당신은 뒤로 돌아야 합니다.ptr
각각 무료로ptr[i]
. 일반적인 규칙은 메모리 누수를 방지하기 위해 다음과 같습니다.malloc()
, 정확히 하나의 대응물이 있어야 합니다.free()
.
간단하죠.
while (N) free(ptr[--N]);
free(ptr);
잘생겼어요
#define FALSE 0
#define TRUE 1
typedef int BOOL;
void freev(void **ptr, int len, BOOL free_seg) {
if (len < 0) while (*ptr) {free(*ptr); *ptr++ = NULL;}
else while (len) {free(ptr[len]); ptr[len--] = NULL;}
if (free_seg) free(ptr);
}
freev(ptr, N, TRUE); /* if known length */
freev(ptr, -1, TRUE); /* if NULL-terminated */
freev(ptr, -1, FALSE); /* to keep array */
패트리시언
GLib 기능:
g_ptr_array_free()
포인터들의 배열을 자유롭게 하기 위해,g_strfreev()
줄을 풀어줄 수 있게 해요.
GLIB 없이는 심각한 C 프로그래밍을 하기가 어렵습니다.동적 문자열과 같은 것을 소개하고 기능적 프로그래밍을 위한 기초를 다집니다.이것은 정말로 표준 C 런타임 라이브러리의 일부여야 합니다.그것은 C에게 신선한 공기를 불어넣어 줄 것입니다.그것은 2019년을 위해 C를 다시 합리적이고 경쟁력 있는 언어로 만들 것입니다.그러나 그렇지 않기 때문에 애플리케이션에 1MB(DLL 크기 또는 실행 파일 크기)가 추가됩니다.또한 윈도우 배포는 새디스트들에 의해 유지됩니다.
for(int i=0;i<N;i++) free(ptr[i]);
free(ptr);
malloc 할당 실패 여부를 확인하고 있지 않습니다.항상 확인하셔야 합니다.
void freeMatrix(int **matrix ,int row)
{
for(int i=0;i<row;i++)
{
free(matrix[i]);
}
free(matrix);
}
언급URL : https://stackoverflow.com/questions/5666214/how-to-free-2d-array-in-c
반응형
'programing' 카테고리의 다른 글
Apache Spark DataFrame에서 열 연결 (0) | 2023.10.17 |
---|---|
C의 잠정적인 정의의 근거는 무엇입니까? (0) | 2023.10.17 |
NSFetchRequest 인스턴스에 유형을 적용하는 방법은 무엇입니까? (0) | 2023.10.17 |
기본 permallinks working word press 기타는 404 error가 됩니다. (0) | 2023.10.17 |
wordpress WP_Query 'order by'가 작동하지 않습니다. (0) | 2023.10.17 |