2011-03-09 2 views
4
typdef struct _structname 
{ 
    int x; 
    string y; 
} structure_name; 

structure_name variable; 

이제 variable.xy에 액세스합니다. 그것을 사용한 후 어떻게 내가 할당을 해제하거나 variable에 의해 사용되는 메모리를 해제 할 수 있습니까?구조 변수의 메모리를 확보하는 방법

실제로 메모리가 할당 될 때 variable.y = "sample string". = 연산자가 문제의 원인이되는 메모리를 할당합니다. 어떻게 해결할 수 있을까요?

+0

코드의 서식을 지정하려면 편집 필드 위에 * 형식 코드 * 버튼을 사용하십시오. –

+0

무슨 문제입니까? 내가 = 연산자 .SO variable.y = "샘플 문자열"을하고있는 중이 야 때 실제로 메모리가 할당지고 설명 – Nikko

답변

5

동적으로 할당 된 메모리는 할당을 해제해야합니다.

동적 할당은 new 또는 malloc을 사용하여 수행되고 할당 해제는 각각 delete 또는 free을 사용하여 수행됩니다.

프로그램에서 new 또는 malloc을 사용하지 않는 경우 delete 또는 malloc을 사용할 필요가 없습니다. delete의 번호는 new과 동일합니다. 그리고 mallocfree도 마찬가지입니다.

즉, 프로그램에서 :

  • 수 실행newdelete 문 실행 의 수와 같다!malloc 문 실행
  • 번호는free 문 실행 의 수와 같다!

가있는 경우 의 수가 적은delete 또는 free, 당신의 프로그램 메모리가 누수되는 실행. 의 숫자가new 또는 malloc으로 실행되면 프로그램이 중단 될 가능성이 큽니다.

+0

에 대한 – SPB

+0

@SPB : 메모리는 표준 : : 문자열 클래스가 아니라 자신에 의해 할당지고 있습니다. 따라서 걱정할 필요가 없습니다. 내가 말했듯이, 당신이 새로운 것을 사용한다면, 당신은 적어도 그렇지 않은 시나리오에서 삭제를 사용해야합니다! – Nawaz

7

스택에 구조를 할당했습니다. 사용중인 메모리는 범위를 벗어날 때 해제됩니다. 메모리가 해제 된 시점을 제어하려는 경우 동적 메모리 할당을 조사해야합니다.

+0

덕분에 문제를 일으키는 메모리를 할당합니다. 어떻게 해결할 수 있을까요? – SPB

3

C++에서는 구조를 "typedef"할 필요가 없습니다.

사용 :

당신이 myVar에 이런 식으로 작성하는 경우
struct structure_name 
{ 
    int x; 
    int y; 
}; 

: 범위 밖으로 갈 때 당신은 그것을 할당을 해제 할 필요가 없습니다

structure_name myVar; 

을 자동으로 파괴 해제됩니다.

"new"키워드로 만든 포인터를 사용했다면 "delete"키워드를 사용하여 명시 적으로 해제해야합니다.

C++에서는 특정 경우에만 포인터를 사용합니다.

0

당신이 값이 아닌 포인터와 동적 메모리를 allocationg하지로를 선언 한 이후 확보 할 필요가 없습니다.

메모리는 동적으로 메모리를 할당 할 경우에만 해제해야합니다.

1

변수의 수명은 괄호 {} 쌍을 도입하여 제어 될 수있다.

{ 
    structure_name variable; // memory for struct allocated on stack 
    variable.y = "sample string"; // y allocates storage on heap 

    // ... 

} // variable goes out of scope here, freeing memory on stack and heap 
관련 문제