동적할당(realloc말고 크기바꾸기)

·2023년 3월 12일
0

📌동적할당시 arr_size 증가


1. 그냥 arr_size를 증가시키면 안되나?(❌)

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

int main()
{
	int* arr;
	int* arr2;
	int arr_size;
	scanf("%d", &arr_size);

	arr = (int*)malloc(sizeof(int) * arr_size);

	for (int i = 0 ;i < arr_size; i++)
	{
		arr[i] = i;
		printf("%d ", arr[i]);
	}
	printf("\n");

	//사이즈 증가
	arr_size += 3;
    
    //2번 코드 넣기
    
	for (int i = 0; i < arr_size; i++)
	{
		arr[i] = i;
		printf("%d ", arr[i]);
	}
    
	free(arr);
}

값의 입력은 들어가는데 free할때 오류가 뜬다.
값은 왜 들어가는거지? (추측)자기 메모리 공간을 넘어서 다른 메모리 침범해서 덮어 쓰는중이다
free할때 오류가 난다.

2.하나씩 대입해서 넣는다.(❌)

arr2 = (int*)malloc(sizeof(int) * arr_size);

for (int i = 0; i < arr_size + 3; i++)
{
	arr[i] = arr2[i];
}

1번과 별다를게 없다 free할때 오류가난다.

3. 다른 포인터의 주소를 대입한다.(⭕)

arr2 = (int*)malloc(sizeof(int) * arr_size);
	arr = arr2;
	printf("%p\n", arr);
	printf("%p\n", arr2);

arr2의 주소를 받아서 출력한다.
arr의 arr_size 10이지만 arr2의 길이는 13인데 주소대입이 된다.

profile
개인공부저장용(하루의 기록)

0개의 댓글