您好我将整数参数传递给线程并使用该整数计算阶乘。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <ctype.h>
void * factorial(void * number) {
int factorial = 1;
int counter = 1;
int newnum = *((int*)number);
printf("%d", newnum);
pthread_exit(NULL);
}
void * sumup( void * number) {
}
int main(int argc, char *argv[]) {
if(argc != 2) {
printf("Argument number error\n");
exit(1);
}
pthread_t thread1;
pthread_t thread2;
int i;
for(i = 0; i < argc; i++){
printf(argv[i]);
printf("\n");
}
int rc;
void * t = argv[1];
rc = pthread_create(&thread1, NULL, factorial, (void*)t );
if (rc != 0) {
printf("There was an error creating the thread\n");
exit(1);
}
pthread_exit(NULL);
exit(0);
}
现在我只是想打印发送的整数以使其正常工作,但这是我的输出:
./任务1 五 1162608693
它应该打印出5而不是1162608693
答案 0 :(得分:1)
argv
表存储指向字符的指针。通过做:
void * t = argv[1];
int newnum = *((int*) t );
您要打印的是字符串"5"
的整数值。您正在传递字符串的地址:
'5' '\0'
转换为指向int
的指针,因此您尝试读取第一个sizeof(int)
字节的整数值,从而产生:
5 0 [and you read sizeof(int)-2 bytes out of range]
导致未定义的行为。
解
要将作为参数传递给您的程序的字符串转换为整数,请使用atoi
或strtol
进行更好的错误检查。