HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0727
モノmemcpyでの多次元配列のコピー7解決


モノ

リンク

2009/7/27(Mon) 18:58:40|NO.26565

1次元配列でのmemcoyを用いた配列のコピーは、

dim a,10
dim b,10

a(1) = 8
a(2) = 5

memcpy b, a, 4*10   //"4"はint型のサイズ

のようにして行うことができました。
しかし、多次元配列でも同様のことをしようとしているのですが、ここで行き詰ってしまいました。

例えばdim a,5,6なら、最初は単純に4*5だけ確保すれば良いと思い、

memcpy b, a, 4*5*6   //"4"はint型のサイズ

としたのですが上手くいきませんでした。ここの掲示板をmemcpyで検索して、
http://hsp.tv/play/pforum.php?mode=all&num=25193
この記事を発見し、単純に掛算したサイズではないと理解はしたのですが、
どのようなサイズになっているのか、また具体的にどうすれば思い通りの結果を得られるのか良いのか分かりませんでした。


どなたか知識をお持ちの方、力をお貸しいただけると幸いです。



この記事に返信する


KA

リンク

2009/7/27(Mon) 19:32:46|NO.26566

>>上手くいきませんでした
どう書き直して、どう上手く出来ないのかはっきりさせて下さい。


取りあえず別に何事も無く、コピー出来ますが・・・


dim a,5,6 dim b,5,6 a(0,0) = 1 a(1,0) = 2 a(2,0) = 3 a(0,1) = 4 a(4,5) = 5 memcpy b, a, 4*5*6

次元の指定方法が悪いのでは??



KA

リンク

2009/7/27(Mon) 19:41:34|NO.26567

ちなみに
a(5,6)
が出来ないことは御分かりと思いますが、念のため。



モノ

リンク

2009/7/27(Mon) 19:55:13|NO.26568

>ちなみに
a(5,6)
が出来ないことは御分かりと思いますが、念のため。

うわああ、まさにその通りのミスをおかしていました。
http://hsp.tv/play/pforum.php?mode=all&num=25193
の記事を読んだ直後だったせいか、別に原因があると考えており見事に勘違いしていたようです……大変申し訳ありませんでした。

このままではなんなので、もう一つ疑問が出てきました追加質問をさせていただきたいと思います。
int型の場合は4*配列サイズ、double型の場合は8*配列サイズですが、str型の場合はどうなるのでしょう?
>最低でも1要素あたり 64 バイトは確保します
とのことですが、単純に64*配列サイズではないのですよね?
(sdim 64, 4, 5なら64*4*5ではない?)



KA

リンク

2009/7/27(Mon) 20:02:23|NO.26569

一昔前のhspなら出来ましたが、最近のhspは動的に割り当てるらしいの
で、64バイト以上のデータが有る場合は、この方法は使えません。



KA

リンク

2009/7/27(Mon) 20:09:57|NO.26570

>>一昔前のhspなら出来ましたが、最近のhspは動的に割り当てるらしいの
>>で、64バイト以上のデータが有る場合は、この方法は使えません。

64バイト以下でも使えないかも分かりませんが・・

蛇足ながら str形 とは謳っていますが、文字列として扱わなければバイナリ
データのバッファとして扱えます(sdim)



モノ

リンク

2009/7/27(Mon) 20:16:57|NO.26571

なるほど、理解しました。ありがとうございました!



レノス

リンク

2009/7/27(Mon) 21:25:35|NO.26573

蛇足です。

> このままではなんなので、もう一つ疑問が出てきました追加質問をさせていただきたいと思います。
> int型の場合は4*配列サイズ、double型の場合は8*配列サイズですが、str型の場合はどうなるのでしょう?
> > 最低でも1要素あたり 64 バイトは確保します
> とのことですが、単純に64*配列サイズではないのですよね?

str 型の場合、2つ以上の要素を、memcpy を用いて、一発でコピーすることはできません。
そのため、foreach やら repeat length() やらで地道にコピーするしかありません。



ONION software Copyright 1997-2021(c) All rights reserved.