从C ++中的类访问数组内容时出错

时间:2014-03-02 05:57:48

标签: c++ visual-studio

您好我在运行此脚本时出错。它使用多线程,并在类中有数组。例如,我尝试使用foo1设置数组,foo执行while (gg[50] != 40) do xxxxxx

我有一个cout验证数组已设置但是它返回垃圾但是当我在main中询问它返回正确时。有没有解决这个问题?或者在Windows中有更好的方法吗?

#include "stdafx.h"
#include <thread>
#include <iostream>
#include <stdio.h>      /* printf */
#include <time.h>       /* clock_t, clock, CLOCKS_PER_SEC */

using namespace std;

class bar {
public:

void setarray(int r, double y){
    gg[r] = y;
}


void foo() {
    int y = 0;
    cout << gg[50] << "gg2" << endl;
    std::cout << "hello from member function2" << std::endl;
    while (gg[50] != 40){
        y++;
    }
    cout << y << " y2" << endl;
}

void foo1() {
    int y = 0;
    std::cout << "hello from member functiondddw1" << std::endl;

    cout << gg[50]<< "gg1"<<endl;
    std::thread(&bar::foo, bar()).detach();

    while (gg[50] != 40){
        y++;
    }
    cout << y << " y1" << endl;

}

double  getarray(int g){
    double ek = gg[g];
    return ek;
}
private:
double gg[80];

};

int main()
{

bar jj;

int u=0;
cout << "which array" << endl;
cin >> u;
double dd=0;
cout << "which number" << endl;
cin >> dd;
    jj.setarray(u, dd);
    if( jj.getarray(u) == 3){
    clock_t tt;
    tt = clock();

    std::thread(&bar::foo1, bar()).detach();
    tt = clock() - tt;

    printf("It took me %d clicks (%f seconds).\n", tt, ((float)tt) /         CLOCKS_PER_SEC);

    cout << "done" << endl;
        }
    cout << jj.getarray(50);
     u=0;
    cout << "which array" << endl;
    cin >> u;
 dd=0;
    cout << "which number" << endl;
    cin >> dd;
    jj.setarray(u, dd);

cin.get();
return 0;
}

2 个答案:

答案 0 :(得分:0)

当cout打印垃圾并且没有时,你的描述就不那么清楚了。但是,如果从线程引用cout,问题是main()不会等到线程完成并实际退出销毁Bar jj实例。这就是为什么要打印垃圾的原因。最佳实践规则 - 主要应该等待所有线程完成,然后再调用返回。

答案 1 :(得分:0)

我找到了一些重写的​​解决方案。我添加了

    void main2()
{
    std::thread(&bar::foo1, this).detach();
}

并从main调用并添加。     std :: thread(&amp; bar :: foo,this).detach(); 到另一个功能。