1은 C 프로그램, 각종 데이터의 할당은 메모리에 기재된
① 전역 변수 --- 메모리 정적 메모리
② 비 정적 로컬 변수의 동적 메모리 스택 ---- --- 스택 메모리
힙시 필요 열 때 데이터 ③ 임시로 사용이 --- 적시에 출시하지 않고, 언제든지, 동적 메모리 할당 영역을 설정 --- 힙
이 변수 또는 어레이 선언 부 변수 이름을 수신 할 수 없거나 데이터 어레이 이름으로 정의되어 있지 않기 때문에 ④ 시스템 공간이 원하는 크기에 적용하는데 필요한 포인터만을 호출 할 수
2 동적 메모리 할당 상관 함수
① 헤더 파일 사용법 #include <stdlib.h>가 4의 동적 할당의 함수를 선언
② 함수 원형의 공극 *의 malloc (usigned INT 크기) // memorey 할당
역할 :
연속 공간 크기에 대한 길이의 메모리 할당 동적 메모리 (스택 영역)
부호 정수 크기 타입 파라미터, 함수 반환 값, 즉 상기 할당 된 영역의 첫 번째 바이트의 어드레스이며,이 함수 포인터 타입 함수 헤드 위치 할당 영역에 대한 포인터를 리턴
의 malloc (100) : 100 바이트 임시 광장 첫번째 바이트 주소의 반환 값
③ 기능의 프로토 타입 void *은 calloc (부호 N, 부호 사이즈)
N이 공간 배열을 저장하기에 충분히 일반적 큰 연속 공간의 메모리 크기와 같은 동적 메모리 할당 길이 역할 ------
사용자는 어레이 요소의 N 개의 각각의 길이의 크기로, 일차원은 calloc 함수를 사용하여 동적 메모리 어레이를 개방 할
포인터의 할당 기능 도메인 시작 위치에 대한 포인터를 돌려, 할당에 실패, 반환 NULL
p =은 calloc (50,4) : 오픈 임시 공간 50 * 4 바이트 포인터 변수 (P)에 할당 개시 어드레스
④ 함수 보이드없이 (공극의 * P)를 시제품
역할 ---- 무료 가입 메모리 공간 변수 P는 점 때문에,이 공간은 다시 사용되는 다른 변수가 될 수 있음
p는은 calloc 또는 malloc에 함수 반환 값으로 다음 호출에서 최근 기능입니다
여유 함수의 반환 값이 없습니다
무료 (P)는 : 동적 페이지가 가리키는 할당 된 공간을 해제
⑤ 기능 프로토 타입 void * realloc을 (무효 * P는, 부호 INT 크기)
---- 재분배 효과 또는은 calloc 함수 malloc을 수득 동적 공간, 공간의 크기를 동적으로 동일한 크기 (P)의 값을 할당 실패 리턴 NULL로 P 지점을 변경
realloc을 (p, 50) : 50 바이트의 여유 공간에 할당되는 P 점
⑥ 반환 형식 설명 :
(3) 동적 배열을 만드는 입력 학생 5 성능, 60 이하 다른 기능 점수가 검출되고, 그 결과의 출력은 실패했다.
. (1 개) 무효 체크 ( INT * P) { 2 의 printf ( " 실패 결과를 갖는다 : \ N- " ) . 3 대 ( INT I = 0 ; I < . 5 ; I ++ ) { . 4 IF (P [I] < 60 ) { . 5 의 printf는 ( " % D \ N- ' , P [I]) . 6 } . 7 } . 8 } . 9 보이드 의 main () { 10 INT * P = ( INT *) malloc이 ( . 5 *sizeof의 ( INT )); // P 할당 INT (에 5 * 4 힙 광장 및 주소 (무효 *), 턴 *) . 11 대 ( INT I = 0 ; I < 5 ; I ++ ) { (12)는 scanf와는 ( " % d 개 " +, P , I) (13)는 } (14) 검사 (P) (15) 무료 (P); // 파괴 힙 공간이 P 영역에 의해 가리키는 16 }
동적 메모리 할당의 4 가지 기본 원칙
① 힙 메모리에 할당 된 메모리의 작은 블록의 수가 할당 않도록 약간의 오버 헤드를 가지고, 메모리 블록보다 큰 메모리 할당 시스템의 많은 작은 블록 여러 큰 오버 헤드를 할당.
필요할 때 당신이 힙 메모리 블록 사용을 완료 한대로 ② 메모리 만 할당, 적시 (동적 메모리 할당을 사용하는 경우, 당신은 원칙을 준수해야합니다 발표 누가 할당)를 해제의 필요성, 그렇지 않으면 메모리 누수
③ 항상 코드를 작성할 때 메모리 할당, 메모리 할당을 해제해야합니다, 결정하기 위해 필요한 경우 메모리에서 코드의 릴리스
④ 메모리를 해제하기 전에, 특히 조심해야, 루프에서 메모리를 할당 할 때 다른 프로그램이 메모리 누수 될 것입니다, 할당 된 힙의 확인 실수로 덮어 쓰지 메모리 주소를 만들