構造体配列のサイズ – プログラミング – Home

通知
すべてクリア

構造体配列のサイズ


けん
 けん
(@けん)
ゲスト
結合: 25年前
投稿: 40
Topic starter  

動的に割り当てた構造体配列のサイズを求めるにはどのようにすればよいのでしょう
か。

たとえば以下のようなコードがあったとして

①の処理が終わったあとで
構造体配列のサイズや要素数こうを求めたいです。

int main(int argc, char* argv[])
{
Sel *sel;
int a;
a = DR(&sel);   ←------- ①
for(int i=0;i<10;i++){
printf(%d\n,sel[i].a);
}
free(sel);
return 0;
}

int DR(Sel **sel)
{
*sel = (Sel*)malloc(sizeof(Sel)*10);

for(int i=0;i<10;i++){
strcpy((*sel)[i].id,");
strcpy((*sel)[i].id,111111);
(*sel)[i].a = i;
}
return 0;
}

構造体の定義
typedef struct _Sel_{
int a;
char id[7];
}Sel;


引用解決済
トピックタグ
とり
 とり
(@とり)
ゲスト
結合: 22年前
投稿: 23
 

> int DR(Sel **sel);

上記の関数に引数を一つ追加して…。

int DR(Sel **sel, int *obj_count );

 …のようにし、DR関数の中で確保した個数を呼び出し元(main関数)に返す
のではダメでしょうか?

 上記で要素数はわかります。サイズはSel型オブジェクトのサイズに要素数を
かけるということで…。

はずしてたらごめんなさい。


返信引用
けん
 けん
(@けん)
ゲスト
結合: 25年前
投稿: 40
Topic starter  

DRを呼び出すほうの関数(ここではmain)の中で
sizeofなどを使ってサイズを求めたいと考えています。
その方法がわからなくて質問しました。
DRの引数などはそのままという条件でお願いします。


返信引用
風
 風
(@風)
ゲスト
結合: 22年前
投稿: 8
 

_msize() とかでいいんでしょか。
意味を取り違えてたらすみません。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

取得することはできません。

というか,ポインタの指す先がオブジェ
クトかその配列かを判別する方法すら存在しません。

現在無意味な関数戻り値を利用するとか,

std::vectorを使うとかしてはどうでしょう。


返信引用
とり
 とり
(@とり)
ゲスト
結合: 22年前
投稿: 23
 

> DRの引数などはそのままという条件でお願いします。

 もし「DR」という関数が他人の管理下にあって、呼び出し元では何も手を
加えることができないということですと、後述の方法も当然駄目という事に
なってしまうんですが、最後の手段としてはグローバル変数を使ってしまう
という道も残されています。

 これなら、引数も戻り値も手を加えることなく、DRからmainにサイズの情
報を渡せますが、極めて推奨されない実現方法になりそうです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました