반응형

2차원 배열

int func(char** a)
{
    char b[10][10];
    char B[10][10];
    char c[10];

    memset(b, 0, sizeof(b));
    memcpy(b[3], &c[3], 7);
    sprintf(b[2], "%s", B[0]);

    a[0]= b[0];
    a[1]= b[1];
}

int main(void)
{
    char a[10][10];
    func(a);
}

'language > C' 카테고리의 다른 글

signed unsigned 차이  (0) 2021.10.09
문자열 제어문자  (0) 2021.10.09
컴파일러 경고, 에러 종류  (0) 2018.10.08
stack, heap  (0) 2018.07.03
소스 정적분석 툴  (0) 2018.06.29
반응형

크기 비교( char, unsigend char)

- 0x01, 0x83

* signed<->signed : 10진수(signed 기준)로 크기 비교한다.

* signed<->unsigned : 16진수(unsigned 기준)로 크기 비교한다.

* unsigned<->unsigned : 16진수(unsigned 기준)로 크기 비교한다.

* unsigned-unsigned <-> 0: 10진수(signed 기준)로 크기 비교한다.

* signed-unsigned <-> 0 : 10진수(signed 기준)로 크기 비교한다.

* unsigned-signed <-> 0 : 10진수(signed 기준)로 크기 비교한다.

'language > C' 카테고리의 다른 글

배열  (0) 2023.04.16
문자열 제어문자  (0) 2021.10.09
컴파일러 경고, 에러 종류  (0) 2018.10.08
stack, heap  (0) 2018.07.03
소스 정적분석 툴  (0) 2018.06.29
반응형

https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%AC%B8%EC%9E%90

 

제어 문자 - 위키백과, 우리 모두의 백과사전

제어 문자 위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://blog.naver.com/eekdland/222272565491

 

하이미와 파이썬 입문! - 문자열 함수 총정리 (표)

이스케이프 문자열 이스케이프 문자는 \로 시작하기 때문에 컴파일 시 \를 만나면 이스케이프 문자로 처리...

blog.naver.com

https://blog.naver.com/hma778/222295893913

 

[C언어 기초] C언어 출력 printf(), 이스케이프 시퀀스, 서식지정문자

안녕하세요. 어제는 C언어의 기본 구조에 대해 알아보았습니다. 오늘은 C언어 출력 printf()와 이스케이...

blog.naver.com

 

'language > C' 카테고리의 다른 글

배열  (0) 2023.04.16
signed unsigned 차이  (0) 2021.10.09
컴파일러 경고, 에러 종류  (0) 2018.10.08
stack, heap  (0) 2018.07.03
소스 정적분석 툴  (0) 2018.06.29
반응형

출처: https://devmachine.blog.me/207239711

 

[C++] new 연산자의 예외 처리에 대한 오해와 진실

※ 대부분의 C++ 개발자들은 new 연산자에 대한 올바른 예외 처리를 하고있지만, 아직까지 잘못된 방법을 ...

blog.naver.com

※ 대부분의 C++ 개발자들은 new 연산자에 대한 올바른 예외 처리를 하고있지만, 아직까지 잘못된 방법을 사용하시는 분들도 종종 있는것 같아서 간단하게 정리해서 올려봅니다.

 

 

new 연산자의 예외 처리에 대한 오해

  

얼마전에 누군가가 작성한 소스에 다음과 같은 코드가 포함되어 있는 것을 발견하였습니다. 약 100MB 정도의 메모리를 할당한 다음 메모리 할당에 실패하였을 경우, 이에 대한 예외 처리를 하는 코드였죠.

 

 

char* ptr;
ptr = new char[100 * 1024 * 1024];
if (!ptr)
{
    ...
}

 

 

얼핏 보면 이 코드는 전혀 문제가 없어보이지만, 사실 아주 큰 문제점을 가지고 있는 코드입니다. 왜냐하면 new 연산자가 실패한다고 하더라고 절.대.로. if 블록 안으로 진입하지 않기 때문이죠. 만약 이 코드를 보고도 전혀 이상한 점을 느끼지 못하셨다면...잠시 반성의 시간을 가지도록 합시다. ^^; (사실 new 연산자에 의한 메모리 할당이 실패하는 일은 거의 없기 때문에 위와 같은 코드에 대한 검증 없이 무심코 넘어가 버리는 경우가 많습니다.)

 

C++ 표준에 따르면 new 연산자의 메모리 할당이 실패할 경우 std::bad_alloc 타입의 예외를 발생시키도록 되어있습니다. 결국 위 코드에서도 메모리 할당에 실패하면 ptr 변수에 NULL이 리턴되는 것이 아니라 std::bad_alloc 타입의 예외가 발생하고, 이 예외는 어디에서도 처리되지 않아 프로그램이 비정상적으로 종료되겠죠. 그렇다면 new 연산자의 메모리 할당이 실패했을 경우의 예외 처리를 제대로 구현하려면 어떻게 해야할까요?

 

 

new 연산자의 올바른 예외 처리 방법

  

1. try-catch

 

당연한 얘기지만 가장 먼저 생각해 볼 수 있는 방법은 try-catch 구문을 이용하여 예외를 처리해주는 방법입니다. new 연산자를 사용하는 코드를 try 블럭으로 묶어주고, catch 구문에서 std::bad_alloc 타입의 예외를 처리하도록 구현하면 되겠죠.

 

 

char* ptr;
try
{
    ptr = new char[0x7ffffffe];
}
catch (std::bad_alloc e)
{
    cout << e.what() << endl;
}

 

 

참고로 MFC 환경에서는 std::bad_alloc 타입이 아닌 CMemoryException 타입의 예외를 발생시키기 때문에(operator new가 오버로드 되어있습니다) 아래와 같이 구현하셔야 합니다. 

 

 

char* ptr;
try
{
    ptr = new char[0x7ffffffe];
}
catch (CMemoryException* e)
{
    ...
}

 

 

2. new(std::nothrow)

 

'나는 try-catch 구문을 이용한 예외 처리 스타일이 영 맘에 들지 않는다' 하는 분들을 위한 방법입니다. new 대신 new(std::nothrow) 를 사용하면, 메모리 할당에 실패했을때 예외를 발생시키지 않고 NULL을 리턴하게 됩니다(이것 역시 C++ 표준에 명시되어 있습니다). 결국 new(std::nothrow) 를 사용할 경우에는 맨 위에서 작성했던 잘못된 코드와 유사한 스타일로 예외 처리를 구현할 수 있습니다.

 

 

char* ptr;
ptr = new(std::nothrow) char[0x7ffffffe];
if (!ptr)
{
    ...
}

[출처] [C++] new 연산자의 예외 처리에 대한 오해와 진실|작성자 데브머신

 

'language > C++' 카테고리의 다른 글

LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 의미  (0) 2008.12.08
반응형

1. 심플 다이어그램

- 윈도우10에서는 기본적으로 설치는 막으나, 강제 설치 가능

- 디자인은 깔끔하지만, 사용법이 직관적이지 않음. 익숙해지면 좋을 듯 함.

- 프로그램이 조금 느린 느낌임.

- 다운로드 사이트: https://software.naver.com/software/summary.nhn?softwareId=GWS_003147

 

심플 다이어그램

다이어그램, 플로우차트를 작성하는 프로그램

software.naver.com

- 참고사이트: http://kinfolksoft.com/%EC%8B%AC%ED%94%8C-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8/

 

심플 다이어그램 - 무료 프로그램

소개 플로우차트(Flow Chart), 다이어그램(Diagram), 모식도 등을 작성, 편집합니다. 만든 다이어그램을  저장하며 이를 인쇄 및 다른 이미지로 출력할 수 있습니다.   사용 환경 윈도우 응용 프로그��

kinfolksoft.com

 

 

2. dia diagram

- 사용법 진관적임.

- 문서 등으로 복사할 때, 깔끔하지 않음. 한글 입력 시, 불편함

  참고: https://m.blog.naver.com/PostView.nhn?blogId=kicpahsh&logNo=220223734821&proxyReferer=https:%2F%2Fwww.google.com%2F

 

플로우차트 작성프로그램 Dia 한글입력 방법

Dia는 다이어그램 작성용 오픈소스SW입니다. Dia 최신버전 : http://live.gnome.org/Dia/Downloadwin...

blog.naver.com

- 다운로드 사이트:http://dia-installer.de/

 

Dia draws your structured diagrams: Free Windows, Mac OS X and Linux version of the popular open source program

Overview Dia is a program to draw structured diagrams. Dia 0.97.2 Free Download Windows, 60 languages (20 MB) Release notes Installer 0.97.2-2 Contains Dia 0.97.2 with updated base libraries. Dia 0.97.2 A bugfix and maintenance release. A lot of translatio

dia-installer.de

 

'language > 알고리즘' 카테고리의 다른 글

시험사이트  (0) 2019.02.17
반응형

1. https://www.codility.com/

   - 우아한형제들에서 채용 시 사용하는 사이트

'language > 알고리즘' 카테고리의 다른 글

무료 순서도 프로그램  (0) 2020.08.14
반응형
  • private
  • default
  • protected
  • public


반응형

1. lvalue required as left operand of assignment 뜻

#define(a, b)     a += b;

->  a는 define으로 인해 상수가 되므로 a가 값을 변경하는 것은 불가능하낟.

     참조: http://thrillfighter.tistory.com/93

'language > C' 카테고리의 다른 글

signed unsigned 차이  (0) 2021.10.09
문자열 제어문자  (0) 2021.10.09
stack, heap  (0) 2018.07.03
소스 정적분석 툴  (0) 2018.06.29
형식지정자 (printf, sprintf 숫자, 문자 출력)  (0) 2016.08.09
반응형

https://blog.perfectacle.com/2017/02/09/c-ref-004/

'language > C' 카테고리의 다른 글

문자열 제어문자  (0) 2021.10.09
컴파일러 경고, 에러 종류  (0) 2018.10.08
소스 정적분석 툴  (0) 2018.06.29
형식지정자 (printf, sprintf 숫자, 문자 출력)  (0) 2016.08.09
[C언어] open flag  (0) 2015.07.14
반응형

http://cppcheck.sourceforge.net/

'language > C' 카테고리의 다른 글

컴파일러 경고, 에러 종류  (0) 2018.10.08
stack, heap  (0) 2018.07.03
형식지정자 (printf, sprintf 숫자, 문자 출력)  (0) 2016.08.09
[C언어] open flag  (0) 2015.07.14
time 함수  (0) 2015.04.21

+ Recent posts