switch문과 전역변수 malloc 선언 관련 질문
아더
질문 제목 : switch문과 전역변수 malloc선언관련 질문질문요점이 2가지라 제목에 한꺼번에 넣을 수가 없었어요...질문 내용 :
한 선배님이 내주신 과제에서 제 코딩을 보고는
이번에 코딩을 하면서 malloc함수는 함수 안에서 사용할 경우 함수가 끝나기 전에 free함수로 끝을 내는게
가장 효율적이라는 얘기를 들었어요
그러면서 제가 코딩했던 부분에서 일부 수정을 하라고 해서 수정을 했죠
그러한 과정에서 의문점이 2가지 들었습니다.
============================================================================
전역변수로 malloc함수를 이용한 변수를 하나 선언하고
#define size 2048
char* buf=(char*)malloc(sizeof(size))
enum {odd=1,even}; // switch문에서 원하는 출력값을 나오게 하고자 선언
...
void readfile(char* buf) //buf를 매개변수로 불러들여서 파일의 데이터를 읽어들임
{
file* file=fopen(test.txt,rt);
fread(buf,char,size,file);
}
void print(int select)
{
int num=0; // 반복문 증가값
switch(select)
{
case odd :
{
for(...)
{
if(..........)
}
break;
}
case even :
{
for(...)
{
if(..........)
}
break;
}
// free(buf);
// free=null;
}
// free(buf);
// free=null;
}
void odd(char* input) // 여기서 input은 main에서 받은 간단한 명령어 정도로 생각하시면 됩니다
{
readfile(buf);
print(1);// 홀수의 값을 나타내고자 열거형 odd=1을 매개변수 선언
}
============================================================================
일단 코딩 내용을 올릴 수가 없기에 비슷한 제가 짠 내용을 토대로 만들어봤습니다
먼저 2가지 의문점이 들었습니다.
1. switch문 안에서 for문을 사용하는 것이 효율적인가요?
이번에 switch문 안에서 for문 사용은 처음이라 그 부분이 궁금해지더라구요...
2. 전역변수 buf를 선언하고 나중에 swtich문을 다 끝내고 나서
buf를 free함수로 메모리 삭제를 할려고 하는데
이상한 부분은 첫번째 주석의 buf에 놓으면 문제없이 잘 돌아가는데...
두번째 주석의 buf에 놓으면.
디버그 시 아래와 같은 에러명이 뜹니다
windows has triggered a breakpoint in comment.exe
this may be due to a corruption of the heap, which indicates a bug in
comment.exe of any of the dlls it has loaded.
this may also be due to the user pressing f12 while comment.exe has focus.
the output output window may have more diagnostic information.
첫번째 buf와 두번째 buf의 차이를 모르겠네요....
어떤 부분이 잘못 된것일까요?
답변 부탁드립니다...