#include <stdio.h>
#include <malloc.h>
 
typedef struct _Person
{
    char Name[20];
	int Age;
} Person;
 
void HeapMemorySize(void* _Memory)
{
    printf("HeapMemorySize : %d\n", _msize(_Memory));
}
 
int main(void)
{
    char* pszData = (char*)malloc(sizeof(char) * 10);
    int* pnData = (int*)malloc(sizeof(int) * 10);
    Person* pPerson = (Person*)malloc(sizeof(Person));
 
    HeapMemorySize((void*)pszData);
    HeapMemorySize((void*)pnData);
    HeapMemorySize((void*)pPerson);
 
    return 0;
}

동적으로 할당된 메모리의 크기는 할당 당시에 확실히 명시해야 하므로 할당받는 처지에서는 그 크기를 모를 수가 없습니다. 그러나 간혹 함수 단위로 코드가 분할되면서 포인터로 주소를 받긴 하지만 크기를 받지 못해 할당된 메모리 크기를 모를 때도 있습니다. 이때 윈도우 운영체제의 경우 _msize()함수를 이용하면 크기를 알아낼 수 있습니다.

(참고로 리눅스, 유닉스는 malloc_usable_size() 함수를 사용합니다.)


[ 출저 ] - 명강의로 완성하는 C 프로그래밍

'C' 카테고리의 다른 글

[C] - 환경변수 출력  (0) 2014.09.08
[C] - const 포인터 사용법  (0) 2014.09.08
[C] - 스캔셋(Scanset)  (0) 2014.09.08
[C] - scanf() 함수  (0) 2014.09.08
[C] - getchar(), _getch(), _getche() 차이점  (0) 2014.09.08
블로그 이미지

행복그리고..

,

프로그램 종료를 위해 간혹 사용되는 방법 중 하나가 윈도우 이벤트를 기반으로 windowClosing 메소드 내에 다음 문장을 삽입하는 것이다. 

 

System.exit(0)
그런데 이 방법은 하나의 창에 있는 X 버튼만 눌러도 프로그램 전체가 종료되고만다. 즉 X 버튼이 눌리지 않는 GUI창도 함께 소멸되는 것이다. 프로그램 종료를 위해, 윈도우 이벤트 처리를 직접 하지 않고 JFrame에 정의되어 있는 다음 메소드를 호출하는 방법도 있다.

public void setDefaultCloseOperation(int operation)

이 메소드는 X 버튼이 눌렸을 떄의 실행 방식을 결정짓는 메소드이다. 이 메소드의 인자로 전달될 수 있는 값의 종류는 총 네가지인데, 이중에서 두가지 정도만 소개한다. 


* WindowConstants.DISPOSE_ON_CLOSE dispose 메소드 호출과 동일한 효과

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

class JFrameWindowClosingEventHandler extends WindowAdapter {
	public void windowClosing(WindowEvent e) {
		JFrame frame = (JFrame)e.getWindow();
		frame.dispose();
		System.out.println("windowClosing()");
	}
}

class JFrameWindow extends JFrame {
	JFrameWindow(String title) {
		super(title);
		this.setSize(300, 200);
		this.setVisible(true);
		this.addWindowListener(new JFrameWindowClosingEventHandler());
	}
}

public class JFrameWindowEventTest {
	public static void main(String[] args) {
		JFrameWindow frameWindow = new JFrameWindow("Window");
	}
}

* JFrame.EXIT_ON_CLOSE System.exit 메소드 호출과 동일한 효과

addWindowListener {
    new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    }
}


블로그 이미지

행복그리고..

,
#include <iostream>
using namespace std;

#define DISALLOW_COPY_AND_ASSIGN(ClassName) \
	ClassName(const ClassName&); \
	void operator=(const ClassName&);

class ClassName 
{
private:
	DISALLOW_COPY_AND_ASSIGN(ClassName);
public:
};

int main(void)
{
	ClassName AclassName;
	ClassName BclassName;
	/*
		매크로선언으로 대입불가능
	*/
	AclassName = BclassName;
}

[ 출저 ] - 읽기 좋은 코드가 좋은 코드다 Page 37 - 38

블로그 이미지

행복그리고..

,