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内存!更安全的方法是使用 a std::vector<char>or 实际上。astd::string而不是成员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++。

但是要回答您的问题,有两种方法可以分配对象的内存:

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 回答