Objective-Cで16ビット/チャンネルまたは48bppのイメージを配列として作成しようとしていますが、これをNSBitmapImageRep
に入れようとしています。最初は、それがうまく動作するかどうかを確認するためにノイズを埋めたいので、C forループを使用しています。何らかの理由でセグメンテーションフォルト11が作成されています。私は単純な.c
ファイルでこのEXACTコードスニペットを試しましたが、それはまったく問題なく動作します。これは、アプリケーションの主な機能で起こっている方法では、私はそれをボタンのクリックでメソッドから行うが、それはグローバルではないので、そこから配列にアクセスする方法を知らない(それについてのいくつかのヒントもあります)。 また、私は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ループを削除しないのはなぜこれは、どのように私はそれが
EDIT作業を取得することができます。おかげで飛行機の配列は、ピクセルデータではありません
配列の最初の要素を初期化していない理由は何ですか?また、 'malloc'の呼び出しが成功したことを確認していますか? Cでクラッシュしないという理由だけで、必ずしも同じバグがそこに存在しないというわけではありません。それはちょうどそれが衝突を引き起こさなかったことを意味する。 – user1118321
要素[0]を設定しないのはなぜですか? –
@ user1118321ランダムなことを指摘してくれてありがとうが、それは助けにならなかった、私はおそらくバグを見つけようとしていた。 –