문제

C에 문제가있는 몇 가지 문제가 있습니다. 저는 이것이 내 코드입니다.

// First line works, second line does not! 
char outbuf[1024];
// char *outbuf = (char *) malloc(1024);  // char is always 1

나는이 outbuf를 불리는 방법으로 전달하고있다 PK11_CipherOp(), NSS 라이브러리에서 선언했습니다. 이 방법에 대한 문서를 찾을 수 있습니다 여기, 당신은 그것이 기대한다는 것을 알 수 있습니다 char * outbuf param의 경우.

첫 번째 줄이 왜 안정적으로 작동하는지 이해할 수 없으며 두 번째 줄은 그렇지 않습니다!

전체 코드를 보려면 참조하십시오 파일 소스

감사,

해밀턴

도움이 되었습니까?

해결책

귀하의 문제는 누락 된 선언으로 보입니다 malloc - 당신은 포함하지 않았습니다 <stdlib.h>.

이것은 컴파일러가 함수가 반환한다고 가정한다는 것을 의미합니다. int, 그런 다음 명시 적으로 캐스팅되고 있습니다 (unsigned char *). 당신이 플랫폼에있는 경우 sizeof(int) != sizeof(void *), x86-64와 마찬가지로 포인터 값을 관리합니다.

이것은 C (c ++와 달리)에서 왜 당신이 해야하는지 완벽하게 보여줍니다. ~ 아니다 결과를 캐스팅하십시오 malloc() - 그렇게하는 것은 불필요 하며이 정확한 버그를 숨 깁니다. 또한 컴파일러 경고를 켜야하는 이유를 보여줍니다.

해결책은 다음과 같습니다 #include <stdlib.h>, 캐스트를 제거하십시오 malloc() 당신이 거기있는 동안.

부록:

다른 문제는 당신이 지나가는 것입니다 sizeof(outbuf) 에게 PK11_CipherOp(). 이것은 정확합니다 (동일합니다 out_buf_size) 언제 outbuf 배열이지만 잘못된 것입니다 (크기는 포인터 자체) 언제 outbuf 포인터입니다.

각각을 교체하십시오 sizeof(outbuf) ~와 함께 out_buf_size 그리고 당신은 가기에 좋을 것입니다 (나중에 또 다른 것이 있습니다) ...

다른 팁

문제를 발견했습니다. 내가 사용하고있는 것으로 밝혀졌습니다 sizeof(outbuf) 매개 변수 중 하나로. 아웃 부프가 스택에 선언 될 때 char outbuf[1024]; 이것은 1024를 반환합니다. 그러나 아웃 부프가 힙에있을 때 char * outbuf = malloc(1024); Outbuf의 크기는 4에 불과합니다.이 매개 변수는 Outbuf에서 얼마나 많은 공간을 사용할 수 있는지 기능에 대해 이야기했기 때문에 기능은 4 바이트의 공간 만 있다고 생각했습니다. 16 개가 필요합니다 아무것 그래서 그것은 어떤 작업도 수행하지 않고 돌아 왔습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top