gpt4 book ai didi

c++ - 使用pthreads在c++中获取段错误

转载 作者:行者123 更新时间:2023-11-28 01:02:58 25 4
gpt4 key购买 nike

我正在为我的操作系统类编写一个带线程的程序。它必须在一个线程中计算斐波那契数列的 n 个值,并在主线程中输出结果。当 n > 10 时,我不断收到段错误。从我的测试中,我发现 compute_fibonacci 函数执行正确,但由于某种原因它永远不会进入 main 中的 for 循环。这是问题所在的带有 cout 语句的代码。感谢您对此提供的任何帮助。

#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

void *compute_fibonacci( void * );

int *num;

using namespace std;

int main( int argc, char *argv[] )
{
int i;
int limit;
pthread_t pthread;
pthread_attr_t attr;

pthread_attr_init( &attr );
pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );

num = new int(atoi(argv[1]));
limit = atoi(argv[1]);

pthread_create(&pthread, NULL, compute_fibonacci, (void *) limit);
pthread_join(pthread, NULL);

cout << "This line is not executed" << endl;

for (i = 0; i < limit; i++) {
cout << num[i] << endl;
}

return 0;
}

void *compute_fibonacci( void * limit)
{
int i;

for (i = 0; i < (int)limit; i++) {
if (i == 0) {
num[0] = 0;
}

else if (i == 1) {
num[1] = 1;
}

else {
num[i] = num[i - 1] + num[i - 2];
}
}

cout << "This line is executed" << endl;

pthread_exit(0);
}

最佳答案

num = new int(atoi(argv[1]));

这是在声明一个用 argv[1] 中的整数值初始化的单个 int。看起来您想改为声明一个数组:

num = new int[ atoi(argv[1]) ];

关于c++ - 使用pthreads在c++中获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com