현재 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에 대한 포인터의 배열의, 픽셀 데이터하지
배열의 첫 번째 요소를 초기화하지 않는 이유는 무엇입니까? 또한'malloc'에 대한 호출이 성공했는지 확인하고 있습니까? C에서 크래시가 발생하지 않았다고해서 반드시 동일한 버그가 존재하지 않는다는 것을 의미하지는 않습니다. 단지 충돌이 발생하지 않았 음을 의미합니다. – user1118321
왜 요소 [0]을 (를) 설정하지 않았습니까? –
@ user1118321 그 임의의 것을 지적 해 주셔서 감사합니다. 그러나 도움이되지 않았습니다. 버그를 찾으려고했을 때 그랬을 것입니다. –