您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 字符串形参传递错误

字符串形参传递错误

来源:网络整理     时间:2016/9/2 2:46:51     关键词:

关于网友提出的“ 字符串形参传递错误”问题疑问,本网通过在网上对“ 字符串形参传递错误”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 字符串形参传递错误
描述:

本帖最后由 march_on 于 2013-04-14 21:59:19 编辑

写了一个程序,结果运行时有段错误,在generate_random_ints_file这个函数调用的地方

Program received signal SIGSEGV, Segmentation fault.
0x08048b08 in generate_random_ints_file (file_name=
    maximum=10000000) at 1.cpp:29

大神看看怎么回事,就是传递字符串做文件名嘛,怎么就错了

  1 #include 
  2 #include 
  3 #include 
  4 #include 
  5 #include 
  6 
  7 using namespace std;
  8 
  9 const int MAXIMUM = 10000000;
 10 
 11 int random_int( int start, int end );
 12 
 13 void generate_random_ints_file(const string file_name, int maximum);
 14 
 15 int main(void)
 16 {
 17     string file_name = "random_ints.txt";
 18 
 19     generate_random_ints_file(file_name, MAXIMUM);
 20 
 21     return 0;
 22 }
 23 
 24 int generate_random_int( int start, int end )
 25 {
 26     return start + rand() % (end-start+1);
 27 }
 28 
 29 void generate_random_ints_file(const string file_name, const int maximum)
 30 {
 31     ofstream file(file_name.c_str());
 32 
 33     int i = 0;
 34     int random_array[MAXIMUM];
 35     int random_int = 0;
 36 
 37     srand( (unsigned) time(NULL) );
 38 
 39     while( i < maximum )
 40     {
 41         random_array[i] = i;
 42         ++i;
 43     }
 44 
 45     i = 0;
 46 
 47     while( i < maximum )
 48     {
                                                                                                                         random_int = generate_random_int(i, maximum);
 50 
 51         int tmp = random_array[random_int];
 52         random_array[random_int] = random_array[i];
 53         random_array[i] = tmp;
 54         ++i;
 55     }
 56 
 57     i = 0;
 58     while( i < maximum )
 59     {
 60         file << random_array[i++] << endl;
 61     }
 62 
 63     file.close();
 64 }

解决方案1:

建议传引用 void generate_random_ints_file(const string& file_name, int maximum)

解决方案2:

进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令

解决方案3:


//int random_array[MAXIMUM];//可能已经栈溢出
int *random_array = new int[MAXIMUM];
解决方案4:

 void generate_random_ints_file(const string& file_name, int maximum); //按引用传递字符串,防止copy


以上介绍了“ 字符串形参传递错误”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3714168.html

相关图片

相关文章