gpt4 book ai didi

c - 来自 atoi 的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:47 24 4
gpt4 key购买 nike

我是编写线程代码的新手,对 C 感到生疏。我已经尝试使用 gdb 进行调试,在我尝试使用 atoi 设置 num 的值后,我似乎遇到了段错误,但我不知道为什么。谁能解释这个段错误?

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

int *ptr;

int getFibonacciNumber(int num)
{
if ( num <= 1 ) return num;
else if ( ptr[num] != 0 ) return ptr[num];
else{
int fibOfNMO = getFibonacciNumber(num - 1);
int fibOfNMT = getFibonacciNumber(num - 2);
ptr[num] = fibOfNMO + fibOfNMT;
return ptr[num];
}
}

void* fibonacci(void* arg)
{
int* num = (int*)arg;
int fib = getFibonacciNumber(*(num));

return NULL;
}

int main(int argc, char** argv)
{
printf("%s", argv[0]);
pthread_t tid_main;
pthread_t tid_fib;
int ret;
int* num;
*num = atoi(argv[0]);

if ( argv[0] != NULL ) ptr = (int*)malloc((*(num) + 1)*sizeof(int));
else exit(EXIT_FAILURE);

int i;
for (i = 0; i < *(num) + 1; ++i) ptr[i] = 0;
ptr[1] = 1;

printf("%d\n", getFibonacciNumber(6));
ret = pthread_create(&tid_fib, NULL, fibonacci, num);
if (ret) {
fprintf(stderr, "error -- pthread_create() failed.\n");
exit(EXIT_FAILURE);
}

ret = pthread_join(tid_fib, NULL);
if (ret) {
fprintf(stderr, "error -- pthread_join() failed.\n");
exit(EXIT_FAILURE);
}

printf("%d\n", ptr[*(num)]);
free(ptr);
return 0;
}

最佳答案

int* num;
*num = atoi(argv[0]);

取消引用未初始化的指针 - 未定义的行为。

改成

int num;
num = atoi(argv[0]);

int *num = malloc(sizeof(int));
*num = atoi(argv[0]);

关于c - 来自 atoi 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209594/

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