2016-11-21 8 views
-2

할당 : 크기가 3687192C++ 서명 숯불 나는 아래의 코드를 사용하여 문제가 있습니다 문제

unsigned char ciphertext[(int)(strlen ((char *)plaintext) * 1.5)]; 

코드가 실행에이 줄을 명중 실패합니다.

그러나, 다음과 같은 값 성공 : 그래서

18 
54 
60 
90 
173196 
224100 

, 어떻게이 문제를 극복 할 수

?

Sidenote 선언문은 unsigned char 변수가 필요한 OPENSSL 암호화/암호 해독 루틴 내에서 사용해야하므로 형식은 unsigned char VARNAME이어야합니다.

미리 감사드립니다.

+3

. 'new char [size];를 사용하여 동적으로 할당하거나'std :: string'을 사용하십시오. – Barmar

+2

VLA는 표준 C++가 아닙니다. –

+3

@Barmar'std :: vector '이이 경우 더 잘 작동합니다. –

답변

1

대답은 모두 주석에 있지만 명확하게 설명 할 것입니다.

일반적으로 로컬 변수는 스택에 할당됩니다. 스택에는 제한이 있으며 무한대로 커질 수 없습니다. 일단 한계에 도달하면 힙에 변수를 할당 할 수 밖에 없습니다.

이 작업을 수행하는 방법은 여러 가지가 있지만 두 가지를 추천합니다. 첫 번째는 std::vector이다

std::vector<unsigned char> ciphertext(strlen ((char *)plaintext) * 3/2, 0); 

다른 기능이 어레이를 통과하고, &ciphertext[0]를 사용한다.

두 번째는 std::unique_ptr입니다 : 당신은 스택 프레임의 크기에 대한 제한으로 실행중인

std::unique_ptr<unsigned char> ciphertext = new unsigned char[strlen ((char *)plaintext) * 3/2];