programing

프로그램 종료 전에 malloc 후에 자유롭지 않으면 실제로 어떤 일이 일어날까요?

yoursource 2022. 12. 21. 23:04
반응형

프로그램 종료 전에 malloc 후에 자유롭지 않으면 실제로 어떤 일이 일어날까요?

우리는 모두 할당된 모든 포인터를 해제해야 한다고 배웠다.하지만 기억을 해방시키지 못할 경우의 실제 대가가 좀 궁금해요.한 경우, '아예'가 '아예: '아예: '아예:malloc()는 루프 내부 또는 스레드 실행의 일부라고 불립니다.메모리 누수가 발생하지 않도록 해방하는 것이 매우 중요합니다. 다음의 두예를 해 보세요: ,, 다, 다, 다, 다, 다, 다, 다, 다, 다, 다이다.

첫 번째로, 다음과 같은 코드가 있는 경우:

int main()
{
    char *a = malloc(1024);
    /* Do some arbitrary stuff with 'a' (no alloc functions) */
    return 0;
}

기서서 ?짜 ?? ????되고, 그 에, 합니다.free(단, 폐쇄성, 유지보수성, 모범적 실무에 있어서도 그 중요성을 인식하고 있습니다).이각각 습습??

둘째, 셸과 같은 기능을 하는 프로그램이 있다고 가정해 보겠습니다.할 수 .aaa = 123나중에 사용할 수 있도록 동적 데이터 구조에 저장됩니다.*alloc 함수(해시맵, 링크 리스트 등)를 호출하는 솔루션을 사용하는 것은 분명합니다. 전화한 가 되는 것은.malloc왜냐하면 이러한 변수는 프로그램 실행 중에 항상 존재해야 하고 정적으로 할당된 공간을 사용하여 이를 구현할 수 있는 좋은 방법이 없기 때문입니다.프로세스 종료의 일부로서만 할당되어 해방된 메모리를 대량으로 사용하는 것은 좋지 않은 설계입니까?면면, 면안?

거의 모든 최신 운영체제는 프로그램 종료 후 할당된 메모리 공간을 모두 복구합니다.유일하게 생각할 수 있는 예외는 Palm OS와 같은 것으로, 프로그램의 정적 스토리지와 런타임 메모리는 거의 같기 때문에 해방되지 않으면 프로그램이 더 많은 스토리지를 차지할 수 있습니다.(저는 여기서 추측하고 있을 뿐입니다.)

따라서 일반적으로 필요한 것보다 더 많은 스토리지를 보유함으로써 발생하는 런타임 비용을 제외하고는 아무런 문제가 없습니다.이 예에서는 변수가 클리어될 때까지 사용할 수 있는 메모리를 유지하고 싶다고 생각하고 있습니다.

그러나 메모리가 필요 없게 되면 바로 메모리를 해방하고, 프로그램 종료 시에 남아 있는 메모리를 해방하는 것이 좋습니다.어떤 메모리를 사용하고 있는지 알고, 그 메모리가 아직 필요한지 생각하는 연습에 가깝습니다.추적하지 않으면 메모리 누수가 발생할 수 있습니다.

한편, 파일을 종료할 때 닫으라는 유사한 조언은 훨씬 더 구체적인 결과를 가져옵니다. 그렇지 않으면 파일에 쓴 데이터가 지워지지 않을 수도 있고 임시 파일인 경우 사용자가 작업을 완료해도 삭제되지 않을 수도 있습니다.또한 데이터베이스 핸들은 트랜잭션을 커밋한 후 종료해야 합니다.마찬가지로 C++ 또는 Objective C와 같은 객체 지향 언어를 사용하는 경우, 작업이 끝났을 때 객체를 해방하지 않으면 소멸자가 호출되지 않으며 클래스를 담당하는 리소스가 정리되지 않을 수 있습니다.

네, 맞습니다.이 예시는 (최소한 최신 운영체제에서는) 아무런 해가 되지 않습니다.프로세스가 종료되면 프로세스에서 할당된 모든 메모리가 운영 체제에 의해 복구됩니다.

출처: 할당과 GC에 대한 개념 (PostScript 경보!)

할당 신화 4: 비배지 수집 프로그램에서는 항상 할당한 모든 메모리의 할당을 해제해야 합니다.

진실: 자주 실행되는 코드에서 할당 해제를 생략하면 누출이 증가합니다.그것들은 거의 받아들여지지 않는다.그러나 프로그램이 종료될 때까지 대부분의 할당된 메모리를 유지하는 프로그램은 종종 별도의 할당 해제 없이 더 나은 성능을 발휘합니다.Malloc은 무료가 없으면 구현하기가 훨씬 쉽습니다.

대부분의 경우 프로그램 종료 직전에 메모리 할당을 해제하는 것은 의미가 없습니다.어쨌든 OS는 그것을 회수합니다.Free는 데드 오브젝트를 터치하여 호출하지만 OS는 조작하지 않습니다.

결과:할당을 카운트하는 "누출 검출기"를 사용할 때는 주의하십시오.어떤 "누출"은 좋아요!

단, 모든 메모리 누수는 피하도록 노력해야 합니다.

두 번째 질문: 당신의 디자인은 정상입니다.애플리케이션을 종료할 때까지 보존할 필요가 있는 경우는, 동적인 메모리 할당으로 보존할 수 있습니다.사전에 필요한 크기를 모르는 경우 정적으로 할당된 메모리를 사용할 수 없습니다.

나는 OP가 맞거나 해가 없다고 말하는 모든 사람들의 의견에 완전히 반대한다.

모두가 최신 OS나 레거시 OS에 대해 이야기하고 있습니다.

그러나 OS가 없는 환경에 있는 경우에는 어떻게 해야 할까요?아무것도 없는 곳에?

스레드 스타일의 인터럽트를 사용하고 메모리를 할당하고 있다고 가정합니다.C 표준 ISO/IEC:9899 에서는, 메모리의 수명은 다음과 같이 기술되어 있습니다.

7.20.3 메모리 관리 기능

1 calloc, malloc 및 realloc 함수에 대한 연속 호출에 의해 할당된 스토리지의 순서와 인접성은 지정되지 않았습니다.할당이 성공했을 때 반환되는 포인터는 적절히 정렬되어 임의의 유형의 오브젝트에 대한 포인터에 할당한 후 할당된 공간에 있는 이러한 오브젝트 또는 해당 오브젝트의 배열에 액세스하기 위해 사용됩니다(공간이 명시적으로 할당 해제될 때까지).할당된 개체의 수명이 할당에서 할당 해제까지 연장됩니다. [...]

따라서 환경이 여러분을 위해 개방적인 역할을 하고 있다고는 할 수 없습니다.그렇지 않으면 마지막 문장에 "또는 프로그램이 종료될 때까지"가 추가됩니다.

다른 말로 하자면:메모리를 해방시키지 않는 것은 나쁜 습관뿐만이 아닙니다.C 준거 코드가 아닌 비포터블 코드를 생성합니다.적어도 '환경에 의해 지원되는 경우 [...]는 정답'으로 볼 수 있습니다.

그러나 OS가 전혀 없는 경우, 아무도 대신해 주지 않습니다(일반적으로 임베디드 시스템에서 메모리를 할당하거나 재할당하지 않는 것은 알고 있습니다만, 경우에 따라서는 그렇게 하고 싶은 경우도 있습니다).

따라서 일반적인 플레인 C(OP 태그 부착)로 말하면 단순히 오류가 발생하여 휴대할 수 없는 코드를 생성합니다.

=== 향후 입증코드 재사용은 어떻게 됩니까?===

오브젝트를 해방하기 위해 코드를 작성하지 않으면 프로세스가 닫힘으로써 메모리가 해방되는 것에 의존할 수 있는 경우에 한해 코드를 안전하게 사용할 수 있도록 제한합니다.즉, 소규모 일회성 프로젝트 또는 "일회성"[1] 프로젝트입니다.프로세스가 언제 끝날지 알 수 있는 장소입니다.

동적으로 할당된 모든 메모리를 free()로 하는 코드를 쓰면 나중에 코드를 증명하여 다른 사람이 더 큰 프로젝트에서 사용할 수 있게 됩니다.


[1] '1회용' 프로젝트에 대해 설명합니다."Throw-Away" 프로젝트에서 사용되는 코드는 버리지 않는 방법이 있습니다.그리고 10년이 지났지만 여전히 "쓰러기" 코드가 사용되고 있다는 것을 알게 됩니다.

어떤 남자가 자기 하드웨어를 더 잘 작동시키기 위해 재미삼아 코드를 만들었다는 이야기를 들었어요."취미일 뿐이지, 커다랗고 프로답지는 않을"이라고 그는 말했다.몇 년이 지난 지금 많은 사람들이 그의 "취미" 코드를 사용하고 있다.

맞아요, 아무런 피해가 없고 그냥 나가는 게 더 빠릅니다.

여기에는 다양한 이유가 있습니다.

  • 모든 데스크톱 및 서버 환경은 exit() 시 메모리 공간 전체를 해방하기만 하면 됩니다.이들은 힙과 같은 프로그램 내부 데이터 구조를 인식하지 못합니다.

  • 모든 것 같다free()에서는, operating system에 메모리를 되돌리는 일은 없습니다.

  • 더 중요한 것은 종료 직전에 완료하면 시간이 낭비된다는 것입니다.종료시에는, 메모리 페이지와 스왑 영역이 간단하게 해방됩니다.반면 free() 콜이 연속되면 CPU 시간이 소비되고 디스크 페이징 조작, 캐시 미스 및 캐시 삭제가 발생할 수 있습니다.

의미 없는 운영이 확실하다고 가정할 때 향후 코드 재사용 가능성에 대해: 이는 고려 사항이지만 신속한 변화를 위한 방법은 아닙니다.야그니!

여기서의 진짜 결과는?

당신의 프로그램이 메모리를 유출했어요.OS에 따라서는, 복구되고 있는 경우가 있습니다.

대부분의 최신 데스크톱 운영체제는 프로세스 종료 시 누출된 메모리를 복구하기 때문에 이 문제를 무시하는 것이 일반적입니다(여기에서 볼 수 있는 다른 답변에서 알 수 있습니다).

그러나 신뢰할 수 없는 안전 기능에 의존하고 있으며, 다음 에는 이 동작으로 인해 "하드" 메모리 누수가 발생할 수 있는 시스템에서 프로그램(또는 기능)이 실행될 수 있습니다.

커널 모드 또는 메모리 보호를 트레이드오프로서 채용하지 않는 빈티지/임베디드 운영체제 상에서 가동하고 있는 경우가 있습니다.(MMU는 다이 공간을 차지하기 때문에 메모리 보호에는 CPU 사이클이 추가되므로 프로그래머에게 청소를 요구하는 것은 무리하지 않습니다.)

원하는 방식으로 메모리를 사용하고 재사용할 수 있지만 종료하기 전에 모든 리소스 할당을 해제했는지 확인하십시오.

일반적으로 할당된 모든 블록은 작업이 끝나면 해방됩니다. 내 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.main(int argc, char *argv[])도 모른다.foo_entry_point(char **args, struct foo *f)함수 포인터로 입력합니다.

그렇게 되면 오줌이 마려워요.

두 번째 질문입니다만, 프로그램이 a=5와 같이 입력했다면 a에 공간을 할당하거나 다음 a="foo"에 같은 공간을 다시 할당하겠습니다.이것은, 다음의 경우에 할당됩니다.

  1. 사용자가 'unset a'를 입력했습니다.
  2. 정리 기능이 입력되어 신호를 처리하거나 사용자가 '종료'를 입력했습니다.

프로세스가 종료된 후 메모리를 회수하지 않는 최신 OS는 생각할 수 없습니다.그리고 free()는 싸니까 청소하는 게 어때요?다른 사람들이 말했듯이, 용기 같은 도구는 정말로 걱정해야 할 누출을 발견하는 데 매우 적합합니다.예시하는 블록은 'reachable'이라고 라벨이 붙어 있어도 리크가 없는지 확인하려고 하면 출력에 노이즈가 더 많이 발생합니다.

또 다른 속설은 "If it in main(), I don't do not free it"인데, 이는 잘못된 것입니다.다음 사항을 고려하십시오.

char *t;

for (i=0; i < 255; i++) {
    t = strdup(foo->name);
    let_strtok_eat_away_at(t);
}

포킹/데몬화(및 이론상으로는 영원히 실행) 전에 발생한 경우, 프로그램은 255회 미정의 사이즈를 누설한 것입니다.

훌륭하고 잘 작성된 프로그램은 항상 그 후에 정리되어야 한다.모든 메모리 해방, 모든 파일 플래시, 모든 디스크립터 닫기, 모든 임시 파일 연결 해제 등크래시를 검출해 재개할 수 있도록 파일을 방치하고 싶은 경우를 제외하고, 이 청소 기능은 통상의 종료시에 또는 다양한 종류의 치명적인 신호를 수신했을 때에 실행할 필요가 있습니다.

정말로, 다른 일들로 넘어갈 때 당신의 물건을 보관해야 하는 불쌍한 영혼에게 친절하게 대하세요.'밸런드 클린'으로 전달합니다. :)

작업 중인 프로젝트의 범위에 따라 다릅니다.당신 질문의 맥락에서, 그러니까 당신 질문만 해도, 그건 중요하지 않아요.

자세한 설명(옵션)을 위해 이 전체 논의에서 확인한 몇 가지 시나리오는 다음과 같습니다.

(1) 메인 OS에 의존하지 않는 임베디드 환경에서 작업하고 있는 경우 메모리 누수가 눈에 띄지 않으면 프로그램이 크래시 될 수 있으므로 메모리를 해방해야 합니다.

(2) 다른 사람에게 공개하지 않는 퍼스널프로젝트에서는 생략하거나(메인 OS에서 사용하고 있는 경우), 「베스트 프랙티스」를 위해서 포함할 수 있습니다.

(3) 프로젝트에 종사하고 있으며 오픈소스를 계획하고 있는 경우, 대상 독자를 대상으로 더 많은 조사를 실시하여 메모리를 해방하는 것이 좋은 선택인지 여부를 판단해야 합니다.

(4) 대규모 라이브러리가 있고 사용자가 메인 OS로만 구성되어 있는 경우에는 OS를 통해 해방될 필요가 없습니다.한편, 모든 데이터 구조를 닫을 필요는 없기 때문에 라이브러리/프로그램이 전체적인 퍼포먼스를 향상시키는데 도움이 될 수 있습니다.셧다운 시간이 길어집니다(집 밖으로 나가기 전에 컴퓨터를 셧다운할 때까지의 매우 느린 대기 시간을 상상해 보십시오).

어느 코스를 선택할지는 계속 지정할 수 있지만, 최종적으로는 프로그램으로 무엇을 달성하고 싶은지에 달려 있습니다.메모리를 해방하는 것은 경우에 따라서는 좋은 관행으로 간주되기도 하고 그렇지 않은 경우도 있기 때문에 궁극적으로 현재 상황에 따라 적절한 시기에 적절한 질문을 해야 합니다.행운을 빕니다.

malloc()는 "heap"이라고 불리는 메모리 영역에서 메모리를 할당하고 프로세스가 종료되면 프로세스의 전체 힙이 해방됩니다.

그러나 종료 전에 모든 것을 해방하는 것이 좋다고 주장하는 이유 중 하나는 메모리 디버거(Linux의 볼그린드 등)가 메모리 누수로 프리드되지 않은 블록을 검출하기 때문입니다.또, 메모리 누수가 「실제」라면, 마지막에 「가짜」의 결과도 얻을 수 있으면, 그것들을 발견하는 것이 더욱 어려워집니다.

OSTEP 온라인 교재에는 실제로 운영체제 학부 과정의 섹션이 있습니다.이 섹션은 당신의 질문에 대해 정확하게 설명합니다.

관련 섹션은 메모리 API 장(6페이지)의 "Forgeting To Free Memory"로 다음과 같이 설명합니다.

경우에 따라서는 free()를 호출하지 않는 것이 타당하다고 생각될 수 있습니다.예를 들어, 프로그램은 수명이 짧아서 곧 종료됩니다.이 경우 프로세스가 종료되면 OS는 할당된 페이지를 모두 청소하므로 메모리 누수는 발생하지 않습니다.이것은 확실히 「효과」가 있지만(7페이지의 「부록」을 참조) 개발에는 나쁜 습관이라고 생각되므로, 그러한 전략을 선택하는 것에 주의해 주세요.

이 발췌문은 가상 메모리의 개념을 소개하는 맥락입니다.기본적으로 이 책의 이 시점에서 저자들은 운영체제의 목표 중 하나는 메모리 가상화, 즉 모든 프로그램이 매우 큰 메모리 주소 공간에 접근할 수 있다고 믿게 하는 것이라고 설명합니다.

이면에서는, operating system은, 유저가 표시하는 「가상 주소」주소를, 물리 메모리를 가리키는 실제의 주소로 변환합니다.

다만, 물리 메모리와 같은 자원을 공유하려면 , operating system이 그것을 사용하고 있는 프로세스를 추적해 둘 필요가 있습니다.따라서 프로세스가 종료된 경우 프로세스의 메모리를 재확보하여 다른 프로세스와 메모리를 공유할 수 있도록 하는 것은 운영체제의 기능과 설계 목표 내에 있습니다.


편집: 발췌문에 기재되어 있는 것을 이하에 나타냅니다.

기타: 프로세스가 종료된 후에도 메모리가 유출되지 않는 이유

을 쓸 는 '어느 '를 사용해서 할 수도 요.malloc()곧 합니까?화할할 필요 ?? ????free()가기직 직전 ??? ???그렇게 하지 않는 것이 잘못된 것처럼 보이지만, 어떤 의미에서도 어떤 기억도 "잃어버리지" 않을 것입니다.이유는 간단합니다.실제로 시스템에는 두 가지 수준의 메모리 관리가 있습니다.메모리 관리의 첫 번째 레벨은 OS에 의해 실행됩니다.OS는 프로세스가 실행될 때 메모리를 제공하고 프로세스가 종료(또는 정지)될 때 메모리를 되돌립니다. 수준의 는 각 내에서 를 들어, 「」를 했을 때, 「내 등입니다.예를 들어, 콜을 할 때 힙 내에 있습니다.malloc()그리고.free()전화하지 못해도free()(따라서 힙 내의 메모리 누수), 운영체제는 프로그램 실행이 종료되면 프로세스의 모든 메모리(코드, 스택 및 여기에 해당하는 힙 페이지 포함)를 회수합니다.주소 공간 내의 힙 상태에 관계없이 프로세스가 종료되면 OS는 이러한 페이지를 모두 회수하기 때문에 해방되지 않은 경우에도 메모리가 손실되지 않습니다.

따라서 단수명 프로그램의 경우 메모리 누수가 동작상의 문제를 일으키지 않는 경우가 많습니다(형식이 불량하다고 생각될 수도 있습니다).장시간 실행되는 서버(예: 웹 서버나 데이터베이스 관리 시스템)를 쓸 때 메모리 누수는 훨씬 더 큰 문제이며, 결국 응용 프로그램의 메모리가 부족하면 크래쉬가 발생합니다.물론 메모리 누수는 운영체제 자체라는 특정 프로그램 내에서 더 큰 문제입니다.다시 한 번 말씀드리지만, 커널 코드를 작성하는 사람은 가장 어려운 일을 하고 있습니다.

메모리 API 장 7페이지에서 참조해 주세요.

운영 체제:세 가지 간단한 부분
렘지 H. 아르파시 뒤소와 안드레아 C.Arpaci-Dusseau Arpaci-Dusseau Books 2015년 3월 (버전 0.90)

맞습니다. 프로세스가 종료되면 메모리가 자동으로 해방됩니다.프로세스가 종료되면 운영체제로 넘어갈 것이기 때문에 광범위한 청소는 하지 않으려 애쓰는 사람도 있습니다.다만, 프로그램 실행중에, 사용하지 않는 메모리를 해방할 필요가 있습니다.그렇지 않으면 작업 세트가 너무 커지면 결국 부족하거나 과도한 페이징이 발생할 수 있습니다.

변수를 해방하지 않는 것은 실제로 위험하지 않지만 첫 번째 블록을 해방하지 않고 메모리 블록에 포인터를 할당하면 첫 번째 블록은 더 이상 액세스할 수 없지만 공간을 차지합니다.이를 메모리 누수라고 합니다.이것을 정기적으로 실시하면, 프로세스의 메모리 소비량이 증가해, 다른 프로세스로부터 시스템 자원을 빼앗기게 됩니다.

프로세스가 단시간인 경우 프로세스가 완료되면 할당된 메모리가 모두 운영체제에 의해 회수되기 때문에 이 작업은 피할 수 있지만, 더 이상 사용하지 않는 메모리를 모두 해방하는 습관을 들이는 것이 좋습니다.

그 점에서는 당신이 전적으로 옳습니다.프로그램이 종료될 때까지 변수가 존재해야 하는 작은 사소한 프로그램에서는 메모리 할당을 해제하는 것이 실질적으로 도움이 되지 않습니다.

실제로 저는 프로그램 실행이 매우 복잡하지만 비교적 짧은 프로젝트에 참여한 적이 있습니다.결정은 메모리 할당만 유지하고 할당 해제를 실수하여 프로젝트를 불안정하게 하지 않는 것이었습니다.

단, 대부분의 프로그램에서는 이 옵션이 적용되지 않거나 메모리가 부족할 수 있습니다.

애플리케이션을 처음부터 개발하고 있는 경우는, 무료 통화의 타이밍에 대해 몇개의 교육을 받은 선택을 할 수 있습니다.이 예제 프로그램은 메모리를 할당하고 몇 초간 작동시킨 후 닫으면 모든 리소스가 해방됩니다.

그러나 서버/장기 실행 중인 응용프로그램이나 다른 사용자가 사용할 라이브러리 등 다른 항목을 작성하는 경우, malloc에 대해 무료로 호출할 수 있습니다.

잠시라도 실용적인 면을 무시한 채, 보다 엄격한 접근방식을 따르는 것이 훨씬 안전하며, 당신이 malloc하는 모든 것을 자유롭게 하도록 강요한다.코드화할 때마다 메모리 누수를 감시하지 않으면 몇 가지 누수가 쉽게 발생할 수 있습니다.바꿔 말하면, 네, 그것 없이도 도망칠 수 있습니다. 하지만 조심하세요.

할당한 메모리를 사용하고 있는 경우는, 아무것도 잘못하고 있지 않습니다.메모리를 사용하지 않고 메모리를 할당하는 함수(메인 이외의 함수)를 쓰는 경우나, 프로그램의 다른 부분에서 메모리를 사용할 수 없게 하는 경우는 문제가 됩니다.그런 다음 해당 메모리를 할당받아 프로그램을 계속 실행하지만 사용할 방법은 없습니다.프로그램실행 중인 다른 프로그램에서 해당 메모리가 제거되었습니다.

편집: 실행 중인 다른 프로그램이 해당 메모리를 빼앗겼다고 해도 100% 정확하지는 않습니다.operating system에서는, 프로그램을 가상 메모리로 스왑 하는 대신, 언제라도 사용할 수 있습니다.</handwaving>그러나 요점은 프로그램이 사용하지 않는 메모리를 비우면 가상 메모리 스왑의 필요성이 적다는 것입니다.

이 코드는 보통 정상적으로 동작하지만 코드 재사용 문제를 고려하십시오.

할당된 메모리를 해방시키지 않는 코드 스니펫을 작성했을 가능성이 있습니다.이 코드 스니펫은 메모리가 자동으로 회수되는 방식으로 실행됩니다.괜찮은 것 같네요.

그런 다음 다른 사람이 초당 1,000회 실행되도록 당신의 단편들을 그의 프로젝트에 복사합니다.그 사람은 지금 프로그램에서 메모리 유출이 심해요.일반적으로는 그다지 좋지 않고 서버 애플리케이션에는 치명적입니다.

기업에서는 코드 재사용이 일반적입니다.통상, 종업원이 작성하는 코드는 모두 회사가 소유하고 있어, 모든 부서가 회사의 소유에 관계없이 재사용할 수 있습니다.그래서 그런 "순진하게 보이는" 코드를 작성함으로써 당신은 다른 사람들에게 잠재적인 골칫거리를 야기한다.이러다 해고당할 수도 있어요.

프로그램이 OS를 종료하기 전에 몇 MB를 해방하는 것을 잊은 경우, 해방됩니다.그러나 프로그램이 몇 주 동안 실행되며 프로그램 내부에서는 몇 주 동안 사용할 수 있는 모든 메모리 누출이 있는 모든 메모리 누출이 발생할 수 있습니다.i원래 한 명을 위해 설계되지 않았다면요.

두 가지 예는 사실 한 가지에 불과합니다.free()프로세스 종료 시에만 발생해야 합니다.지적하신 대로 프로세스가 종료되기 때문에 무용지물입니다.

단, 두 번째 예에서는 정의되지 않은 개수의 IP 주소를 사용할 수 있습니다.malloc()메모리 부족의 원인이 될 수 있습니다.이 상황을 처리하는 유일한 방법은 반환 코드를 확인하는 것입니다.malloc()그에 따라 행동합니다.

언급URL : https://stackoverflow.com/questions/654754/what-really-happens-when-you-dont-free-after-malloc-before-program-termination

반응형