所以我有一个程序从用户获取命令行参数并使用atoi将其转换为数字。一切正常,直到从命令行传递的数字超过2048。
这是一个简单的程序:
int no_of_elements_per_thread = 0;
int main(int argc, char* argv[])
{
int status;
void* thread_arg;
void* res;
int i = 0;
//initialize
no_of_elements_per_thread = atoi(argv[1]);
return 0;
}
当我为不同的值运行程序时,输出如下:
[adeb1][open-19][~/pre2] ./pre2 2098
Segmentation fault
值较小的值:
[adeb1][open-19][~/pre2] ./pre2 210
[adeb1][open-19][~/pre2]
有趣的是,如果我尝试使用%s进行printf而不进行atoi,我仍然会使用argv [1]来获得分段错误。所以似乎argv [1]给出了高于2048的值的问题。
如果重要的话,我在linux中使用gcc。
答案 0 :(得分:0)
您对atoi
的声明在哪里?没有#include <stdlib.h>
,我认为没有。{/ p>
在使用argv [1]之前,您可能还需要确保argc > 1
。