2

C++ で構造体の配列を割り当てる必要があります。どの構造体にも 2 つの int のベクトルが含まれています。これは私の構造体です:

typedef struct _Sample{
vector<int> contourX;
vector<int> contourY;
}Sample;

この配列を割り当てるには、次のコードを記述します。

data = (struct _Sample*) malloc(sizeof(struct _Sample) * nsamples);

Sample 要素を data[0] に割り当てようとすると、実行時にエラーが発生します。問題はどこだ?

4

4 に答える 4

6

配列を作成しようとしています。そのためにはnew[]、メモリの割り当て (およびdelete []割り当て解除) に使用する必要があります。

そうすれば、コードは次のようになります。

Sample* data = new Sample[nsamples];

次に、配列の各要素を任意の配列のように反復処理できます。

for(int i = 0; i < nsamples; i++)
{
    data[i].contourY // do something
    data[i].contourX // do something
}
于 2012-06-03T17:48:17.907 に答える
5

経験則: mallocC++ では使用しないでください。1 これは C 関数であるため、コンストラクターの呼び出しなど、C++ のすべての処理を行うわけではありません。

メモリを動的に割り当てる必要がある場合は、new代わりに を使用してください。


1. これはいくつかの例外を除いたルールですが、ほとんどの場合、包括的なルールとして安全に扱うことができます。

于 2012-06-03T17:47:14.933 に答える
3

使用する必要がありますnew-ベクターのコンストラクターを実行する必要があります。

于 2012-06-03T17:48:44.747 に答える
0

C++ でプログラミングしている場合は、「new」を使用できます...次のように: _Sample* data = new _Sample[size];

于 2012-06-03T17:47:42.010 に答える