c - ./ 处的分段错误
问题描述
我比较陌生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);
}
推荐阅读
- python - 访问多索引数据框中的列
- twitter-bootstrap - BootstrapVue 垂直对齐内容的最佳方式?
- c++ - updatePointCloud-function 导致 vector::reserve 的 std::length_error
- html - 内联多行文本
- database - MongoDB 根据数组列表过滤单个值
- reactjs - 如何在生产中为 Docs 插件的 React Storybook 启用 prop-types
- python - 如何从 pymysql.cursor.description 获取所有数据类型的映射?
- node.js - MERN App在digitalocean中出现连接错误
- python - 图没有在 Jupyter 笔记本中使用 Matplotlib 填充交互式绘图中的画布
- python - Pandas - 从另一个数据帧返回最近的日期时间