-1

所以我有一个程序,它接受用户的命令行参数并使用 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 而不使用 atoi 来执行 printf,我仍然会遇到 argv[1] 的分段错误。因此,似乎 argv[1] 的值高于 2048 时出现问题。

如果这很重要,我在 linux 中使用 gcc。

4

1 回答 1

0

你的声明在哪里atoi?没有#include <stdlib.h>,我会假设没有。

您可能还需要确保argc > 1在使用 argv[1] 之前。

于 2013-02-20T05:08:17.683 回答