关于网友提出的“ 字符串形参传递错误”问题疑问,本网通过在网上对“ 字符串形参传递错误”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 字符串形参传递错误
描述:本帖最后由 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