목록languages/c (6)
Written by coh at home

static library와 header file을 전달 받고 baseline 과 함수를 구현해서 포인터로 보물지도에 담긴 값을 출력했습니다. 문제의 핵심은 1. void* 의 간접참조는 error를 발생시킨다는 것. 왜냐하면 void pointer는 간접참조해도 타입을 알 수 없기 때문. 2.마찬가지로 char* 타입의 변수를 *(char*) 하면은 char형태이기 때문에 원하는 만큼의 간접참조를 할 수 없었습니다. 따라서 이를 해결하는 것이 문제의 핵심이었습니다. 이를 해결하기 위해 주소를 담을 변수 unsigned long long arrVar;를 선언했고 (64 bit CPU는 8byte의 주소길이를 갖기 때문.) arrVar = *arrVar 를 필요한 횟수만큼 loop를 돌았습니다. base ..
우선 반쪽짜리 성공임을 먼저 밝힌다. 예외처리를 잘못 했기 때문. input data의 양끝은 포함 안 하는 data가 있음에도 불구하고 같은 filtersize로 나눠서 반환해 버렸음. 해결책으론 변수 하나 선언 후 loop에 따라 증감 시키고 증감된 값 만큼 나눠주면 됨. //lib #include "Header.h" #include #include #include #define PI (3.14) #define LOOP_I(len) for(int i=0;ib?a:b) #define MIN(a,b) (a>b? b:a) int smoothingfilter(int data[], int datalen, int index, int filtersize) { if (filtersize % 2 != 0) filte..
앞서 작성한 정적 메모리 예제와 비교하면 말도 안 되게 memory usage를 아낄 수 있다. #include #define _CRT_SECURE_NO_WARNINGS #include #include #define MAXNAME 64 int heapusage = 0; typedef struct { int age; float score; char *name; }student; //일일이 data입력하려면 귀찮으니 그냥 random variable로 지정. void set_student(student* dst) { dst->age = rand() % 100; dst->score = rand() % 100; int nameLEN = rand() % MAXNAME; dst->name = (char*)callo..
동적 메모리가 필요한 다음과 같은 상황을 생각해보자. 우리가 어떤 배열을 쓸 것인데 이 배열의 크기를 우리가 변수로 지정해서 필요한 만큼만 쓰고 싶을 때. 근데 지금까지는 배열의 크기를 변수로 지정하는 것은 불가능했다. 왜냐면 변수의 크기는 stack memory에 올라갈 때 (stack frame or block) 결정되는데 배열의 크기는 컴파일 되는 시점에 결정되어야 memory를 할당할 수 있기 때문. 프로그램 실행 중에 사용자의 필요에 따라 메모리 크기를 결정하고 싶어서 이제부터 heap memory에 접근하게 된다. 문법은 다음과 같다. void* malloc(size_t size) heap영역에 size만큼 연속된 메모리 공간을 할당하게 되고 처음에 garbage값이 들어있다. paramete..
#include #define _CRT_SECURE_NO_WARNINGS #include #include #define N 1024 #define MAXNAME 64 typedef struct { int age; float score; char name[MAXNAME]; }student; //일일이 data입력하려면 귀찮으니 그냥 random variable로 지정. void set_student(student* dst) { dst->age = rand() % 100; dst->score = rand() % 100; int nameLEN = rand() % MAXNAME; for (int i = 0; i name[i] = 'a' + rand() % 26; } } ..
#include #define _CRT_SECURE_NO_WARNINGS #include #define max_num_student 255 enum action {add, fine, Exit}; typedef struct { int id; char name[8]; float score; }student; int fileopen(FILE** _fp, char* _filename, char* _mode); int selectaction(void); int printinfo(student* _info); int addstudent(FILE* _fp, student* _info); long finestudent(FILE* _fp, student* _info); int main(void) { FILE* fp = ..