2017-04-16 2 views
2

현재 Objective-C의 배열로 16 비트/채널 또는 48bpp 이미지를 만든 다음 NSBitmapImageRep에 넣으려고합니다. 시작을 위해, 나는 그것이 작동하는지 알아보기 위해 잡음으로 채우기를 원한다. 그래서 C for 루프를 사용하고, 어떤 이유로 Segmentation Fault 11을 생성하고, 이것이 어떻게 가능한지를 볼 수 없다. 간단한 .c 파일에서이 간단한 코드 스 니펫을 시도했지만 정상적으로 작동합니다. 그런데 앱의 주요 기능에서 이런 일이 일어나고 있습니다. 버튼을 클릭 할 때 메소드에서 수행하기를 원하지만, 전역 적이 지 않으므로 배열을 거기에서 액세스하는 방법을 모릅니다. 그것에 관한 몇 가지 팁으로도 할 수 있습니다). 또한 16 비트 픽셀 대신 uint8_t을 사용하여 시도했지만 차이가 없습니다. 아는 사람에분할 오류 11 Objective-C, C가 아닌

int sizeElements = 1880 * 1056 * 3; 
int sizeBytes = sizeElements * sizeof(uint16_t); 
uint16_t * imagearray = (uint16_t *)malloc(sizeBytes); 
for (int i = 1; i < sizeElements; i++) 
{ 
    imagearray[i] = rand() % 65536; 
} 
NSBitmapImageRep * theBitmap = [ 
    [NSBitmapImageRep alloc] 
    initWithBitmapDataPlanes: (unsigned char * _Nullable * _Nullable)imagearray 
    pixelsWide: 1880 
    pixelsHigh: 1056 
    bitsPerSample: 16 
    samplesPerPixel: 3 
    hasAlpha: NO 
    isPlanar: NO 
    colorSpaceName: @"NSDeviceRGBColorSpace" 
    bitmapFormat: 0 
    bytesPerRow: 1880 * 3 * 2 
    bitsPerPixel: 48 
]; 

덕분에,이 시간 동안 날 아프게하고있다 :(

편집 :. 비트 맵 데이터 평면으로 NULL로 초기화하는이 오류를 제거한다, 그러나 너무 for 루프를 제거하는 이유는 무엇 이는 무엇이며 어떻게 작동 얻을 수

편집 :이 같은 &를 추가 : &imagearray 도움이 덕분에 비행기의 배열이 pixe에 대한 포인터의 배열의, 픽셀 데이터하지

+0

배열의 첫 번째 요소를 초기화하지 않는 이유는 무엇입니까? 또한'malloc'에 대한 호출이 성공했는지 확인하고 있습니까? C에서 크래시가 발생하지 않았다고해서 반드시 동일한 버그가 존재하지 않는다는 것을 의미하지는 않습니다. 단지 충돌이 발생하지 않았 음을 의미합니다. – user1118321

+0

왜 요소 [0]을 (를) 설정하지 않았습니까? –

+0

@ user1118321 그 임의의 것을 지적 해 주셔서 감사합니다. 그러나 도움이되지 않았습니다. 버그를 찾으려고했을 때 그랬을 것입니다. –

답변

3

을 @everyoneWhoAnswered l 데이터. 사이에 다른 배열을 넣어야합니다.

귀하의 경우, 이미지가 평면이 아니기 때문에 픽셀 데이터 포인터가 첫 번째 요소에 있고 다른 요소는 NULL로 설정된 배열입니다.

+0

또는, 단지'imageArray' 대신'& imageArray'를 전달하십시오. – user1118321

+0

@ user1118321 및 uliwitness 감사합니다. 완료를 시도하는 것을 잊어 버렸습니다. 고마워요! noobyness에 대해 유감으로 생각합니다. –