2

これは非常にばかげた質問ですが、ここに行きます...

私はこのコードを持つクラスを持っています:

class ArraySection {
public:
    unsigned char *array;
    int start, stop, k;   
};

私がやりたいことは、メイン関数でこのクラスのインスタンスを作成することだけです。私はこれでそれをやろうとしています(長さとnは事前定義されています):

ArraySection *ASarrayPrimes = nullptr;
ASarrayPrimes->array[length];
ASarrayPrimes->start = stop;
ASarrayPrimes->stop += length;
ASarrayPrimes->k = 0;

しかし、これは適切な方法ではないと思います...?これについては、クラスで実際に取り上げたことはありません。(ご参考までに、素数を見つけるためにふるいアルゴリズムを並列化するためにスレッドを使用することになっています。) 私がしようとしているのは、大量の配列を取得し、それをより小さな配列に分割することです (この ArraySection で作成されます)。教授によって与えられたクラス)、それらの別々の小さなスレッドで素数を見つけるためにスレッドを動作させます。

編集: クラスを変更することはできません。私は教授が与えたものでしか働くことができません。

4

4 に答える 4

2

オブジェクトにメモリを割り当てることはありません。でメモリを割り当てるかnew、スタックに保持します。

どちらのオプションでも、クラス内に配列を割り当てることができます。

ArraySection *ASarrayPrimes = new ArraySection; // On the heap
ASarrayPrimes->array = new char[SIZE]; // New character array on the heap
delete [] ASarrayPrimes->array;
delete ASarrayPrimes; // Make sure you free the memory

ArraySection ASarrayPrimes; // On the stack
ASarrayPrimes.array = new char[SIZE]; // New character array on the heap

arrayそのメモリも必ず解放してください!より安全な方法は、std::vector<char>or Indeed を使用することです。これらは割り当て/割り当て解除を処理するstd::stringため、メンバーの代わりにa 。char* array

于 2012-09-14T23:58:20.280 に答える
0

あなたがしたことは、クラスにポインタを置いたことだけです。配列を配置するには、次のようにします。

class ArraySection {
public:
    unsigned char array[100];
    int start, stop, k;
};
于 2012-09-14T23:57:20.530 に答える
0

検討:

class ArraySection {
public:
    string str; // or vector<type> for the type of the number
    int start;
    int stop;
    int k;
};

これにより、すべての配列ビジネスとエラーが回避されます。

必要に応じて、 str.c_str() にアクセスして C スタイルの文字列のデータに読み取り専用でアクセスできますが、実際の長さについて心配する必要はありません。

于 2012-09-14T23:58:38.267 に答える
0

このチュートリアルを見て、C++ を学習してください。

しかし、あなたの質問に答えるために、オブジェクトのメモリを割り当てるには 2 つの方法があります。

1- スタックに割り当てます:

ArraySection arrayInstance;

2-またはヒープ上:

ArraySection  *arrayInstance = new ArraySection();

unsigned char *array次に、変数にメモリを割り当てる必要があります。

1-

arrayInstance.array = new unsigned char[1234];

2-

arrayInstance->array = new unsigned char[1234];
于 2012-09-15T00:00:42.677 に答える