【发布时间】:2021-01-23 21:04:14
【问题描述】:
我正在尝试使用使用数据分配的结构。尽管在每个函数中都获得了正确的输出,但当这些函数通过线程运行时,我得到了一个溢出错误。我目前的代码是:
#include <iostream> // cout, endl
#include <thread> // thread
using namespace std;
// a structure to hold parameters to pass to a thread
struct StatData
{
// the number of numbers
int n;
// the array of numbers
double *numbers;
};
void average(StatData *data, double *avg) {
int id;
int size = data->n;
double sum = 0.0;
for(int i = 0; i < size; i++){
sum += data->numbers[i];
}
*avg = sum / size;
}
void minimum(StatData *data, double *min) {
int id;
int size = data->n;
*min = data->numbers[0];
for(int i = 0; i < size; i++){
if (*min > data->numbers[i]){
*min = data->numbers[i];
}
}
}
void maximum(StatData *data, double *max) {
int id;
int size = data->n;
*max = data->numbers[0];
for(int i = 0; i < size; i++){
if (*max < data->numbers[i]){
*max = data->numbers[i];
}
}
}
int main(int argc, char** argv) {
// checking if arguments were passed
if (argc <= 1) {
cout << "No numbers were passed." << endl;
cout << "At least one number needs to be entered." << endl;
return 1;
}
// declaring worker threads
thread avg_t, min_t, max_t;
// variables for values
double avg_v;
double min_v;
double max_v;
// initalizing data structure to hold numbers
StatData data;
data.n = argc - 1; // the amount of numbers passed
data.numbers = new double[data.n]; // allocating space for nums
// Filling in the array with numbers using atof
for (int i = 0; i < data.n; i++) {
data.numbers[i] = atof(argv[i+1]); // converting string to double
}
// creating average thread
avg_t = thread(average, &data, &avg_v);
// creating minimum thread
min_t = thread(minimum, &data, &min_v);
// creating maximum thread
max_t = thread(maximum, &data, &max_v);
// wating for threads to finish
avg_t.join();
min_t.join();
max_t.join();
printf ("The average value is %d\n", &avg_v);
printf ("The minimum value is %d\n", &min_v);
printf ("The maximum value is %d\n", &max_v);
// freeing up dynamically allocated space
delete[] data.numbers;
}
当我运行一个值为 47、58 和 6 的 ./test 时,我得到一个打印语句: 平均值为-502425280 最小值为 -502425288 最大值为-502425296
我不确定我哪里出错了导致代码这样做。
【问题讨论】:
-
这是否取决于线程的使用?作为新用户,请同时关注tour 并阅读How to Ask。哦,顺便说一句,使用
std::vector!
标签: c++ multithreading memory allocation