C++ 基于用户输入不工作(cin)创建多个线程的程序?

C++ 基于用户输入不工作(cin)创建多个线程的程序?,c++,multithreading,C++,Multithreading,如果这个问题看起来很简单,我很抱歉。我还在学习线程。我已经尝试在这里搜索解决方案,但没有找到任何解决方案 我试图让我的程序根据用户输入创建一些线程(例如:“cin>>5”将创建5个线程),但它说“threads myThreads[I]”中的“I”需要是一个常量值。代码如下: void exec(int n) { cout << "Thread " << n << endl; } int main() { int numThreads =

如果这个问题看起来很简单,我很抱歉。我还在学习线程。我已经尝试在这里搜索解决方案,但没有找到任何解决方案

我试图让我的程序根据用户输入创建一些线程(例如:“cin>>5”将创建5个线程),但它说“threads myThreads[I]”中的“I”需要是一个常量值。代码如下:

void exec(int n)
{
    cout << "Thread " << n << endl;
}


int main()
{
    int numThreads = 0;

    // create threads
    cin >> numThreads;
    thread myThreads[numThreads]; // this part says myThreads "must be a constant value"

    for (int i = 0; i < numThreads; i++)
    {      
        myThreads[i] = thread(exec, i);
    }

    for (int i = 0; i < numThreads; i++)
    {
        myThreads[i].join();
    }

    cout << "Done!" << endl;
}
void exec(int n)
{

cout多线程没有问题。问题是您将静态数组用作动态数组

试着这样做:

thread* myThreads = new thread[numThreads];
有关C++中动态内存的更多信息:

詹姆斯·阿德基森的UPD:
不要忘记
delete[]
您的数组以避免内存泄漏。

is
C++
为什么不建议使用
std::vector
?通常最好不要直接处理动态内存分配(例如,使用
std::unique\u ptr
std::make\u shared
)。现在可以使用了。非常感谢。我非常感谢。@G_Man确保您知道此代码不是异常安全的,如果不执行
delete[]
,将泄漏资源。@James Adkison噢,好的。非常感谢。您试过使用
std::vector
?(例如,
std::vector myThreads(numThreads);