2012-04-10 11 views
-1

バイナリは構造体の配列を別の配列にコピーします。問題は、それが正常に動作しないと、私は理由を知らないです。すべてが私にとっては妥当であるようです。C/C++バイナリコピー配列関数が機能しません

  • 画素が
  • pixarr1 [8] [2]、
  • pixarr2は2へのポインタである二次元動的配列へのポインタであり、3 unsigned char型の、はsizeof(画素)を有する構造= 3であります3次元ダイナミックアレイ[8] [n]。例えば、n = 8、それは重要ではない。

は、私はこのような何かをする必要があります。

for(int i=0; i<8; i++) { 
    for(int y=0; y<2; y++) { 
     arr2[i][y] = arr1[i][y]; 
    } 
} 

しかし、私は、「バイナリ」それをやりたいです。このように:

void copyStruct(pixel*** pixarr1, int startline, int height, pixel*** pixarr2) { 

    pixel** arr1 = *pixarr1; 
    pixel** arr2 = *pixarr2; 
    unsigned char buffer[16]; 

    int sizeofstruct = height*3*8; 
    int padding; 

    for(int i=0; i<=sizeofstruct; i+=16) { 
     if (i+16 > sizeofstruct) { 
      padding = sizeofstruct-i; 
      memcpy(buffer, arr1+i, padding); 
      memcpy(arr2+(startline*8)+i, buffer, padding); 
     } else { 
      memcpy(buffer, arr1+i, 16); 
      memcpy(arr2+(startline*8)+i, buffer, 16); 
     } 
    } 
} 

私は間違いがありますか?

PS。ソースに関する問題を申し訳ありませんが、このエディタは..

PPSです。ポインタの使用に焦点を当てないでください。私はそれらを使用する必要があります。関数の外側と内側にポインタを表示すると、同じアドレスが表示されるので、(論理的に)良いです。

+0

実際にsizeof(ピクセル)を印刷しましたが、それは3ですか? – Kaganar

+6

「正しく動作しません」とはどういう意味ですか? –

+0

最も単純なケースstartline = 0と小さな配列から始めます。それは動作しますか?あなたが得た結果は何ですか?ソース配列と宛先配列を投稿できますか? –

答えて

0

ポインタを使用して関数に配列を渡すことはできますが、ポインタへのポインタを使用して多次元配列を渡すことはできません。あなたはここに多次元配列へのポインタを作成する方法についての詳細を読むことができます:

編集:私たちは本当にここより多くの情報が必要 。 「正しく動作しない」ということは、正確にはどういう意味ですか?データはコピーされますが、最後のバイトが欠落していますか?プログラムがクラッシュしますか?マシンは青写真になり、喫煙を開始しますか?プログラムが何を見ているのか、それがあなたが期待するものとどのように違うのかを教えてください。

ここでポインタの操作量を考えると、デバッガでコードをステップ実行し、すべてのポインタをダブルステップで確認することを強くお勧めします。それは、物事が間違って始まる場所を明確に示すとともに、理由について強い示唆を与えます。

高レベル(非memcpy)バージョンのコードが動作する場合、私は、その機能のために放出されたアセンブリを調べ、memcpyベースのバージョンのために放出されるアセンブリと比較することをお勧めします。ライブラリの中には、バイトサイズのループのループを持つmemcpyが実装されているものがあります。バイナリバージョンは実質的に上位バージョンと同等になります。その場合は、追加された複雑さ以外のmemcpyバージョンを使用して、おそらく多くを得ることはできません。

+0

これは動的な配列なので、書くのは忘れてしまった。だから当然です。 – marxin

+0

私のコードのいくつかの問題をすでに認識しています。私は最終的に解決するときに解決策を投稿します。今、私は多くの時間を取ることはできませんが、すぐに私はそうします。 – marxin

関連する問題