달력

122025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
동적 할당이 한번이라도 들어간 프로그램을 다루다보면, 
메모리를 해지할때, 즉 free(...) 함수를 호출할때 예외가 발생하고 종료되는 경우를 겪어봤을 것이다.

주위의 사람들을 둘러보니
이럴때 대처 방식은 이랬다.

'그냥 메모리 해지 하지 말자'


but,,,,,,,, 메모리 관리는 철저히 관리되어야 한다.

적절한 곳에 free(...)를 호출했는데도 에러가 난다면, 
이유는 다음과 같을 것으로 예상되니 확인해보길 바란다..

1) 동적할당할때 지정해준 사이즈를 확인한다.
2) memset(...) 함수를 사용했다면, 이때 지정해준 크기와, 동적할당시 지정해준 크기가 같은지 확인한다.
3) 동적할당된 변수를 사용할때 인덱스가, 범위를 벗어나서 사용하고 있지는 않은지 확인한다.

 

'C Programming' 카테고리의 다른 글

구조체로 malloc 사용법 및 구조체의 사이즈  (0) 2010.11.01
Posted by 와일드_
|

동적 할당을 하기 위해 다음과 같이 선언한다고 가정하자.
#include <stdlib.h>
DATA* data = (DATA *)malloc(sizeof(DATA));


위와 같이 선언하면, DATA구조체의 사이즈만큼의 메모리가 할당된다.
여기에서 DATA의 구조를 다음과 같이 가정하면,

typedef struct DATA DATA;
struct DATA{
     int a;
     int b;
     char c;
};


sizeof(DATA)의 결과로, 9byte가 나와야 한다. -> int(4) + int(4) + char(1) = DATA(9)
하지만 실제로 찍어보면 12byte가 나올 것이다.


이유인즉슨, 32bit의 컴퓨터에서 보다 빠른 연산을 위해 4바이트 단위로 메모리를 할당하기 때문에 생기는 현상이다.
이것을 패딩비트(padding bit)라고 한다. 혹은 메모리 정렬(memory alignment)이라고도 한다.
컴파일러의 옵션을 통해 패딩비트가 발생하지 않도록 할 수 있다고 한다.

'C Programming' 카테고리의 다른 글

메모리 해지시 발생하는 에러의 원인  (0) 2011.07.10
Posted by 와일드_
|