./ 处的分段错误
Segmentation fault at ./
我是 C
的新手,我开始使用线程和命令行;我只需要一些调试和错误处理方面的帮助。每次我尝试处理代码时,我 运行 都会遇到分段错误。如果有 argv[1]
的参数,它工作正常。然而,当试图捕获任何错误时,例如只输入“./example”而没有其他任何错误,它会发现一个分段错误。
我尝试了以下代码的变体,但没有成功,包括查看是否 argc < 1
:
int main(int argc, char * argv[]){
pthread_t worker1;
int in;
if(arv[1] == NULL){
printf("ERROR HERE");
}else{
in = strtol(argv[1], &endptr, 10);
}
if(*endptr > in || *endptr == in){
printf("please eneter a number larger than zero");
return EXIT_FAILURE;
}else{
pthread_create(&worker1, NULL, worker, &in);
pthread_join(worker1, NULL);
}
return EXIT_SUCCESS;
}
下面是我正在使用的当前代码,我很确定它是我忽略的一些小东西。我以前从未使用过 strtol
并且以前使用过 atoi
,我听说这样做是更好的做法。我比较确定错误出在提供的代码中,因为当我测试线程函数时,它工作正常;如果需要更多信息,请告诉我!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <time.h>
int main(int argc, char * argv[]){
pthread_t worker1;
int in = strtol(argv[1], &endptr, 10);
if(*endptr > in || *endptr == in){
printf("please eneter a number larger than zero");
return EXIT_FAILURE;
}else{
pthread_create(&worker1, NULL, worker, &in);
pthread_join(worker1, NULL);
}
return EXIT_SUCCESS;
}
您正在尝试访问一个数组,但没有首先进行任何类型的边界检查:
int main(int argc, char * argv[]){
pthread_t worker1;
int in = strtol(argv[1], &endptr, 10);
...
谁说 argv[1]
存在?当然不是您的程序,因为它不会首先检查该条件。添加对 argc
的检查,以确保您在尝试使用参数之前获得了预期的参数数量。
if (argc > 1) {
int in = strtol(argv[1], &endptr, 10);
}
我是 C
的新手,我开始使用线程和命令行;我只需要一些调试和错误处理方面的帮助。每次我尝试处理代码时,我 运行 都会遇到分段错误。如果有 argv[1]
的参数,它工作正常。然而,当试图捕获任何错误时,例如只输入“./example”而没有其他任何错误,它会发现一个分段错误。
我尝试了以下代码的变体,但没有成功,包括查看是否 argc < 1
:
int main(int argc, char * argv[]){
pthread_t worker1;
int in;
if(arv[1] == NULL){
printf("ERROR HERE");
}else{
in = strtol(argv[1], &endptr, 10);
}
if(*endptr > in || *endptr == in){
printf("please eneter a number larger than zero");
return EXIT_FAILURE;
}else{
pthread_create(&worker1, NULL, worker, &in);
pthread_join(worker1, NULL);
}
return EXIT_SUCCESS;
}
下面是我正在使用的当前代码,我很确定它是我忽略的一些小东西。我以前从未使用过 strtol
并且以前使用过 atoi
,我听说这样做是更好的做法。我比较确定错误出在提供的代码中,因为当我测试线程函数时,它工作正常;如果需要更多信息,请告诉我!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <time.h>
int main(int argc, char * argv[]){
pthread_t worker1;
int in = strtol(argv[1], &endptr, 10);
if(*endptr > in || *endptr == in){
printf("please eneter a number larger than zero");
return EXIT_FAILURE;
}else{
pthread_create(&worker1, NULL, worker, &in);
pthread_join(worker1, NULL);
}
return EXIT_SUCCESS;
}
您正在尝试访问一个数组,但没有首先进行任何类型的边界检查:
int main(int argc, char * argv[]){
pthread_t worker1;
int in = strtol(argv[1], &endptr, 10);
...
谁说 argv[1]
存在?当然不是您的程序,因为它不会首先检查该条件。添加对 argc
的检查,以确保您在尝试使用参数之前获得了预期的参数数量。
if (argc > 1) {
int in = strtol(argv[1], &endptr, 10);
}