アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある変数により動的確保を行いたいのですが、構造体中の変数に対して動的確保はできるのでしょうか?

struct data{
int i[30]; /*←ここの配列を動的に確保したい*/
double d[40]; /*←ここの配列を動的に確保したい*/
}data1[10];

よろしくお願いします。

A 回答 (6件)

> data構造体の方も動的に確保したいと考えております。


ならば data に対しても vector を使います。

#include <vector>

struct data {
std::vector<int> i;
std::vector<double> d;
data(int ni=10, int nd=10) : i(ni), d(nd) {}
};

int main() {
std::vector<data> data1(10); // data[0]..data1[9]
....
return 0;
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ちゃんと実行確認をしてから、お礼の内容を書けばよかったのですが、一時の間、行うことができなくなってしまいました。一応ここで締め切らせてもらって、後ほど実行してみようと思います。
本当にありがとうございました。

お礼日時:2003/03/08 18:46

data構造体の動的確保も同じです。

ポインタにします。

struct data{
 int *i;
 double *d;
} *data1;

data1 = calloc(10, sizeof(struct data));
if (data1 == NULL) {
 エラー処理
}

data1[0].i = calloc(30, sizeof(int));
if (data1[0].i == NULL) {
 エラー処理
}

data1[0].d = calloc(40, sizeof(double));
if (data1[0].d == NULL) {
 エラー処理
}

data1[0].i[0] = 1;
data1[0].d[0] = 1.1;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2003/03/08 18:44

# ANo.#3 を受けて...



C++なら可変長の配列がライブラリに用意されています。

struct data {
std::vector<int> i;
std::vector<double> d;
data(int ni, int nd) : i(ni), d(nd) {}
};
    • good
    • 0
この回答へのお礼

回答ありがとうございます。vectorの存在は知っていたのですが、No.1~No.3さんまでの御礼の内容にありますように、data構造体の方も動的に確保したいと考えております。

また、名前空間の使い方(私のパソコンでstdが認識できない)と、この行の内容がわからないので、勉強してみます。
data(int ni, int nd) : i(ni), d(nd) {}

お礼日時:2003/02/27 18:03

ちょっと、質問の意図からずれるかもしれませんが c++ に手を出してみてはどうでしょう?



struct data {
 int *i;
 double *d;
 data();
 ~data();
};

data::data()
{
 i = new int[確保したい個数(その1)];
 d = new double[確保したい個数(その2)];
}

data::~data()
{
 delete [] i;
 delete [] d;
}

{ /* 使うとき */
 data* data1 = new data[10];
 ~
}

ま、確保したい個数をどう渡すか、ってことは別に考えなくちゃいけないんですが。

C の範囲だと、#2 のような感じで、いちいち malloc() するしかないんです。

{
 struct data {
  int *i;
  double *d;
 } data1[10];
 int i;

 for (i = 0 ; i < 10 ; ++i) {
  data1[i].i = malloc(sizeof(int) * 確保したい個数(その1));
  data1[i].d = malloc(sizeof(double) * 確保したい個数(その2));
 }
}

と、いった感じで。

# エラー処理も入れてなければ、動作確認もしてません
    • good
    • 0
この回答へのお礼

回答ありがとうございます。C++は最近になって勉強し始めたのでなれていませんが、少しずつプログラムに取り入れていこうとおもっています。もし、dataの構造体も動的に確保したい場合はどうすればよいか教えてもらえないでしょうか?よろしくお願いします。

お礼日時:2003/02/27 17:55

素人です 記述のしかたが古いのですけど、いちおう Borland C++ 5.5.1 で


コンパイルと実行して見ました、問題ないみたいです。

#include <stdio.h>
#include <stdlib.h>

struct data{
int *i; /*←ここの配列を動的に確保したい*/
double *d; /*←ここの配列を動的に確保したい*/
}data1;

void main()
{
int i;
int count0,count1;

count0=100;
count1=200;

if ((data1.i=(int *)malloc(sizeof(int)*count0))==NULL)
{
printf("メモリが確保できませんでした\n");
exit( EXIT_FAILURE );
}
for(i=0;i<100;i++) {*(data1.i+i)=0;}

if ((data1.d=(double *)malloc(sizeof(double)*count1))==NULL)
{
printf("メモリが確保できませんでした\n");
exit( EXIT_FAILURE );
}
for(i=0;i<100;i++) {*(data1.i+i)=0;}

for(i=0;i<100;i++) {data1.i[i]=i;}
for(i=0;i<200;i++) {data1.d[i]=i;}

for(i=0;i<100;i++) {printf("%d: %d\n",i,data1.i[i]);}
for(i=0;i<200;i++) {printf("%d: %e\n",i,data1.d[i]);}
}

見当はずれでなかったら嬉しいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2003/02/27 17:51

このような場合は、ポインタにします。



struct data{
 int *i;
 double *d;
}data1[10];

data1[0].i = calloc(30, sizeof(int));
data1[0].d = calloc(40, sizeof(double));
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
data1の方が固定した状態ではよくわかりましたが、data構造も動的に確保するためいのですが。。。。VC++で出来る範囲で。よろしくお願いします。

お礼日時:2003/02/27 17:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!