2011-04-26 10 views
0

기기에서 메모리 누출을 찾기 위해 Instruments를 사용했지만 문제를 해결하거나 해결 방법을 찾을 수 없습니다. 그것은 내 첫 번째 애플 리케이션 및 Objective - C에 첫 번째 침략 그래서 나는 아마도 꽤 바보 같은 일을하고 있어요. 누구든지 도와 줄 수 있습니까? NSString 객체 "str"이 출시되지는 않을 것이라고 추측하고 있습니다.하지만 어떻게 해제하고 반환합니까?iPad에서 메모리 누수 문제를 해결할 수 없습니다.

- (NSString *)MakeMsg:(uint8_t)slaveAddr FunctionCode:(uint8_t)functionCode StartReg: (uint16_t)startReg Range:(uint16_t)range { 

NSString *str; 

uint8_t CRCbyte1; 
uint8_t CRCbyte2; 
uint8_t buf[MODBUS_MSG_LEN_BYTES+LRC_BYTE+ASCII_WRAPPER]; 
uint8_t ASCIIbuf[(MODBUS_MSG_LEN_BYTES*2)+LRC_BYTE+ASCII_WRAPPER]; 

buf[0] = slaveAddr; 
buf[1] = functionCode; 
buf[2] = (uint8_t)(startReg >> 8); 
buf[3] = (uint8_t)(startReg & 0xFF); 
buf[4] = (uint8_t)(range >> 8); 
buf[5] = (uint8_t)(range & 0xFF); 

if (RTUMode==YES){ 
    // calculate the CRC bytes 
    [self GenerateCRC16:buf CRC1:&CRCbyte1 CRC2:&CRCbyte2]; 
    buf[6] = CRCbyte1; 
    buf[7] = CRCbyte2; 
} 

if (ASCIIMode==YES){ 
    // calculate the LRC byte 
    [self GenerateLRC:buf Length:(uint8_t)MODBUS_MSG_LEN_BYTES ASCIIBuffer:ASCIIbuf]; 

    // convert the buffer to ASCII 
    [self BufToASCII:buf ASCIIBuffer:ASCIIbuf]; 

    // add the ASCII wrapper ':',buf,'CR','LF' 
    [self AddASCIIWrapper:buf ASCIIBuffer:ASCIIbuf]; 
} 

str = [NSString stringWithUTF8String:(const char *)ASCIIbuf]; // <-- Memory leak identified as this line right here by Instruments 
return str;// Return the string value of our command so we can use it in a comms log display. 

가}

이 어떤 도움을 크게 감상 할 수있다 :

다음은 소스 코드입니다! 감사합니다 Matthew

+0

누수가 간단한 경우, 일반적으로 빌드 및 분석은이를 잘 나타냅니다. 발견 된 오류를 수정해야합니다. –

답변

2

악기는 누출 된 개체가 생성 된 곳만 알려줍니다. 어디서나 누출 될 수 있기 때문에 누출이 어디서 누출되지 않았는지 말할 수 없습니다.

대부분의 경우 개체의 어딘가에있는 속성에 문자열을 할당하고 해당 개체의 -dealloc에서 문자열을 릴리스하지 못할 가능성이 높습니다.

0

str 누출이 아니거나 적어도 게시 한 코드에서 누출되지 않습니다. + stringWithUTF8String :을 사용하여 문자열을 생성하므로 자동 다시 렌더링 된 객체가 반환됩니다. 이 객체를 반환하는 것이 안전하며 호출자가이 객체를 사용할 수는 있지만 결국 호출됩니다. 호출자가 -MakeMSG에서 수신 한 문자열에 대한 참조를 유지하려는 경우 호출자는이를 유지해야합니다.

+0

감사합니다. JeremyP/Caleb. 나는 그것을 몰랐다. 나는 누수가 어디에서 발생했는지 실제로 악기가 지적했다고 생각했습니다. 그것은 왜 조정의 양이 누설을 없애 버리는지를 확실히 설명합니다. –

관련 문제