Small Grey Outline Pointer 메모리의 동적할당/malloc
본문 바로가기
Dev./C++

메모리의 동적할당/malloc

by sso. 2022. 4. 4.

메모리의 동적 할당

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void ex1802() {
	int arrsize, darrsize;

	printf("arr size, darrsize 입력: ");
	scanf_s("%d %d", &arrsize, &darrsize);
	
	int* iptr = (int*)malloc(sizeof(int) * arrsize);
	double* dptr = (double*)malloc (sizeof(double) * darrsize);
	int i;
	


	printf("int 값 출력 및 입력 \n");
	for (i = 0; i < arrsize; i++) {
		printf("%d번째 array값 입력: ");
		scanf_s("%d", &iptr[i]);
	}

	for (i = 0; i < arrsize; i++) {
		printf("%d ", iptr[i]);
	}

	printf("\n");

	printf("double 값 입력 및 출력: \n");


	for (i = 0; i < darrsize; i++) {
		printf("%d번째 darray값 입력: ");
		scanf_s("%f", &dptr[i]);
	}

	for (i = 0; i < darrsize; i++) {
		printf("%f\n", dptr[i]);
	}


	if (iptr != NULL)free(iptr);
	if (dptr != NULL)free(dptr);


}


void main() {
	ex1802();
}

arr size, darrsize 입력: 3 3
int 값 출력 및 입력
415280064번째 array값 입력: 1
415280192번째 array값 입력: 2
415280192번째 array값 입력: 3
1 2 3
double 값 입력 및 출력:
415280064번째 darray값 입력: 4
415280192번째 darray값 입력: 5
415280192번째 darray값 입력: 6
-6277436788246010498694920686139708971712647739890593669666194849792.000000
-6277436789815285932541590877098656327514564343916182530782203478016.000000
-6277436791384561366388261068057603683316480947941771391898212106240.000000

 

프로그램이 실행되는 동안 사용할 메모리 공간을 할당한다

사용이 끝난 후 free로 메모리를 해제해줘야 함

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getString(void) {
	char* strinput[100];
	printf("좋아하는 단어는? ");
	gets(strinput);//입력받기
	char* str = (char*)malloc(sizeof(char) * strlen(strinput));//사이즈:입력받은 문자열의 길이
	str = strinput;
	return str;
}

void ex1803(){
	char* result = getString();
	printf("당신이 좋아하는 단어는: %s\n", result);

}


void main() {
	ex1803();
}

좋아하는 단어는? banana
당신이 좋아하는 단어는: banana

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ex1804() {
	int* ptr;//할당된 메모리의 주소값을 저장할 포인터
	int count = 0; //입력받은 데이터 개수
	int maxSize = 3; //할당받은 메모리 크기
	int num;
	int i;

	ptr = (int*)calloc(maxSize, sizeof(int));
	while (1) {
		printf("정수를 입력하세요(-1입력시 종료): ");
		scanf_s("%d", &num);
		if (num == -1) {
			break;
		}
        
        
		//입력한 정수의 개수가 메모리 크기만큼 찼을 경우
		if (count == maxSize) {
			maxSize += maxSize;
            //재할당을 통한 메모리 영역 확장
			ptr = (int*)realloc(ptr, maxSize * sizeof(int));
		}

		ptr[count++] = num;

	}


	for (i = 0; i < count; i++) {
		printf("%d ", ptr[i]);
	}

	printf("\n");

	if (ptr != NULL) {
		free(ptr);
	}

}



void main() {

	ex1804();

}

 

 

정수를 입력하세요(-1입력시 종료): 1
정수를 입력하세요(-1입력시 종료): 2
정수를 입력하세요(-1입력시 종료): 3
정수를 입력하세요(-1입력시 종료): 4
정수를 입력하세요(-1입력시 종료): 5
정수를 입력하세요(-1입력시 종료): 6
정수를 입력하세요(-1입력시 종료): -1
1 2 3 4 5 6


 

 

s2에 동적할당을 진행하고, s1의 값을 복사한다

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void prac01() {

	char* s1 = "Take a look";
	char* s2 = (char*)malloc(sizeof(char) * strlen(s1)+1);


	strcpy(s2, s1);

	printf("%s\n", s2);

	if (s2 != NULL)free(s2);

}


void main() {
	prac01();
}

Take a look

 

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void prac03() {

	int num=0;
	int cnt=0;
	
	printf("문자열의 최대 길이는? ");
	scanf_s("%d", &num); //문자열 길이 입력받기

	char* str = (char*)malloc(sizeof(char) * (num+1));//입력 받은 문자열의최대길이
	printf("문자열 입력: ");
	gets(str);
	gets(str);
	

	for (int i = 0; i < num; i++) {
		if ((int)str[i] == 97) {
			cnt++;
		}
	
	}
	printf("a의 개수는 %d 개 입니다.", cnt);

}



void main() {
	prac03();
}

문자열의 최대 길이는? 50
문자열 입력: hahaha
a의 개수는 3 개 입니다.

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void prac02() {
	int arr[5] = { 10,20,30,40,50 };
	int* pa;
	int* pb;
	int* pc;
	int i;
	pa = (int*)malloc(sizeof(arr));
	for (i = 0; i < 5; i++) {
		pa[i] = arr[i];
	}
	pb = (int*)calloc(pa[3], sizeof(int));
	pc = (int*)realloc(NULL, pa[4]);
	printf("pa: %d,pb: %d,pc: %d", sizeof(pa), sizeof(pb), sizeof(pc));

}

void main() {

	prac02();

}

pa: 8,pb: 8,pc: 8

728x90

댓글