시간측정

C 2013. 11. 26. 21:12
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
    clock_t begin, end;
    begin = clock();        // 시간설정
 
    /************************************************************************/
    /*                              측정 코드                               */
    /************************************************************************/
 
 
    end = clock();          // 시간설정
    cout<<"수행시간 : "<<((end-begin)/CLOCKS_PER_SEC)<<endl;
 
    return 0;
}


Posted by bogus919
,

DAMAGE: after Normal block (#XXX) at 0xXXXXXXXX


혹은


Windows가 @#!^!%!@#$%!@.exe에서 중단점을 트리거했습니다.


힙이 손상되었거나 @#!^!%!@#$%!@.exe 또는 여기서 로드한 DLL에 버그가 있을 수도 있습니다.


자세한 진단 정보는 [출력] 창을 참조하십시오.


이래 뜨면

힙을 잘못 사용한듯

malloc으로 메모리를 10만큼 할당했는데

그 범위를 넘는 메모리에 데이터를 썼을 때 생기는 에러같다

원래 안 써지는게 정상같지만

memset이나 memmov를 쓰니까 그냥 문제없이 들어간거 같음

그래서 힙은 지금 할당되지 않은 메모리에 데이터가 쓰여져 있는 상태이고

그 상태에서 메모리를 free해주거나 또 다시 malloc해주면 에러가 난다

힙의 데이터들이 garbage(?)가 된것같다

'C' 카테고리의 다른 글

시간측정  (0) 2013.11.26
함수의 지역변수 리턴에 대하여  (0) 2013.09.15
시간을 마이크로 세컨드 단위로 받아오고 싶을때  (0) 2013.09.14
strtok  (0) 2013.09.09
string끝에 NULL을 넣을때  (0) 2013.09.09
Posted by bogus919
,

어.. 그러니까 말야

내가 함수를 호출할건데 

그 함수는 그 함수안에서 생성한 로컬변수를 리턴할거란 말이야?


그런데 로컬변수는 그 함수가 끝나는 순간 스택에서 사라져버리잖아?

그래서 리턴을 하긴했는데 그 리턴한 값이 없어져버렸다 이거야

정확하게는 value가 아닌 reference의 경우에 해당한다( 포인터나 배열 )


자 그래서 여기에 대한 해결방법은

1. 전역변수 선언하여 프로그램 종료시까지 메모리유지(not good)

2. static을 선언하여 프로그램 끝날때까지 해당 변수의 메모리를 유지(not good)

3. malloc(), 즉 heap영역에 메모리를 할당하여, 사용자가 메모리 해제 시점을 지정(반드시 해제 해야함)

4. 호출 쪽에서 인자를 전달하고, 그 인자를 리턴( good )



아 역시 이래서 기본이 중요하군

C언어 뒤쪽 메모리 관리 부분 다시 공부해야할 것 같다

포인터는 역시 알다가도 모를 놈이군

포인터를 살짝 고쳤더니 프로그램이 아예 병신이 되는 경우도 겪었다 방금전에

'C' 카테고리의 다른 글

시간측정  (0) 2013.11.26
DAMAGE: after Normal block (#XXX) at 0xXXXXXXXX  (0) 2013.11.18
시간을 마이크로 세컨드 단위로 받아오고 싶을때  (0) 2013.09.14
strtok  (0) 2013.09.09
string끝에 NULL을 넣을때  (0) 2013.09.09
Posted by bogus919
,

#include <sys/time.h>

에 포함되어있는


int gettimeofday(struct timeval *tv, struct timezone *tx);

를 사용하면 된다


struct timeval{

long    tv_sec;    //초

long    tv_usec;  //마이크로 초

}


로 구성되어있고

timezone은 그냥 무시하고 NULL을 넘겨주면 된다

'C' 카테고리의 다른 글

DAMAGE: after Normal block (#XXX) at 0xXXXXXXXX  (0) 2013.11.18
함수의 지역변수 리턴에 대하여  (0) 2013.09.15
strtok  (0) 2013.09.09
string끝에 NULL을 넣을때  (0) 2013.09.09
scanf 공백 입력받기  (1) 2013.09.08
Posted by bogus919
,

strtok

C 2013. 9. 9. 22:00



오 뻑킹 이런것도 몰랐다니

Posted by bogus919
,

string끝에 NULL을 넣을때

C 2013. 9. 9. 15:15

char str[10];이 있고


str[5] = NULL; 

을 입력하면


assignment makes integer from pointer without a cast

라는 warining이 뜨게 된다

컴파일러가 NULL을 (void*)0 으로 인식하는데 

말그대로 포인터가 casting없이 인티저로 된다는 것 같다


이럴땐 컴파일러가 헷갈리지 않도록 NULL대신

str[5] = '\0' 

으로 바꿔주면 된다

물론 그냥 str[5] = 0;

으로 해도되는데, 널이라는거를 강조해주고 싶었음

그리고 g++로 컴파일하면은 걍 경고 안뜸

'C' 카테고리의 다른 글

DAMAGE: after Normal block (#XXX) at 0xXXXXXXXX  (0) 2013.11.18
함수의 지역변수 리턴에 대하여  (0) 2013.09.15
시간을 마이크로 세컨드 단위로 받아오고 싶을때  (0) 2013.09.14
strtok  (0) 2013.09.09
scanf 공백 입력받기  (1) 2013.09.08
Posted by bogus919
,

scanf 공백 입력받기

C 2013. 9. 8. 05:14
scanf("%[^\n]") 
여기서 ^는 여집합이고
[] 전체 집합임

[^\n] 은 \n(개행)의 여집합 즉, 개행을 제외한 모든 집합을 뜻한다 

이말은 개행이 들어가기 전까지 입력을 받는다는 뜻이다


Posted by bogus919
,