2013-02-12 2 views
0

문제가 :검증 컨트롤러 문제

가이 단선 메소드의 반환 발생 공전
Memory is never released; potential leak of memory pointed to by 'p' 

:

- (NSString *)encodeBase64:(const uint8_t *)input length:(NSInteger)length 
{ 
    return [NSString stringWithUTF8String:base64_encode(input, (size_t)length)]; 
} 

base64_encode 기능 : 메모리 할당

char* base64_encode(const void* buf, size_t size) 
{ 
    static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 

    char* str = (char*) malloc((size+3)*4/3 + 1); 

    char* p = str; 
    unsigned char* q = (unsigned char*) buf; 
    size_t i = 0; 

    while(i < size) { 
     int c = q[i++]; 
     c *= 256; 
     if (i < size) c += q[i]; 
     i++; 

     c *= 256; 
     if (i < size) c += q[i]; 
     i++; 

     *p++ = base64[(c & 0x00fc0000) >> 18]; 
     *p++ = base64[(c & 0x0003f000) >> 12]; 

     if (i > size + 1) 
      *p++ = '='; 
     else 
      *p++ = base64[(c & 0x00000fc0) >> 6]; 

     if (i > size) 
      *p++ = '='; 
     else 
      *p++ = base64[c & 0x0000003f]; 
    } 

    *p = 0; 

    return str; 
} 

답변

2

로해야 free(str) 후 변환 char *NSString에 : 그것은 해방 후`메모리의 사용 : 내가받을했습니다 그렇게되면

- (NSString *)encodeBase64:(const uint8_t *)input length:(NSInteger)length 
{ 
    char *base64 = base64_encode(input, length); 
    NSString *ret = [NSString stringWithUTF8String:base64]; 
    free(base64); 
    return ret; 
} 
+0

해결책이 효과를 발휘했습니다. 고맙습니다! – h4cky

0

함수가 free과 함께 출시되어야하는 경우, 그는 라인

*p = 0; 

free(p); 
+0

'- base64_encode return 문에서. – h4cky

+0

예, 맞습니다.'p'와'str'은 같은 주소를 가리키고 있습니다. 공개 할 수 없으므로 이전 프로젝트에서 구현 한 방법을 확인하십시오. @Tomas가 제시 한 바와 같습니다 – tkanzakic

+0

귀하의 도움 나는 인정했다. 고맙습니다! – h4cky