随机串生成器分段故障

时间:2016-01-03 12:36:51

标签: c++ linux string debugging segmentation-fault

我有一个练习,其中我创建了一个生成随机字符串的函数!当我在Windows中运行该程序时它工作正常,但当我尝试在linux中运行相同的程序时,我得到一个分段错误。我在linux上做了调试 我走了这个:

**程序接收信号SIGSEGV,分段故障。 get_unique_name()()**

中的0x08048be5

get_unique_name()

的代码
/*Function that generates random strings*/
string get_unique_name( ) 
{
  char* s ;          
  for (int i = 0; i < 3 ; ++i) 
  {
     int randomChar = rand()%(26+26+10);
     if (randomChar < 26)
         s[i] = 'a' + randomChar;
     else if (randomChar < 26+26)
         s[i] = 'A' + randomChar - 26;
     else
         s[i] = '0' + randomChar - 26 - 26;
}
 s[3] = 0;
 return s ;
}

3 个答案:

答案 0 :(得分:0)

您没有初始化s指针。

使用数组解决了您的问题:

 char s[4];

答案 1 :(得分:0)

char* s;

是未初始化的指针。取消引用它是未定义的行为。函数的返回类型是(std::string,因此s也应该是std::string

std::string s(3, ' '); // ' ' is a dummy character
// you could also do
std::string s;
s.resize(3);

不需要s[3] = 0;(需要删除)。

答案 2 :(得分:0)

是一个需要指向内存中某个位置的指针。然后,您可以在此内存位置存储一些数据(位)。只定义(char * s)指针本身并不分配指针指向的内存,您需要显式地使指针指向您必须首先动态分配的内存位置(malloc / calloc / new etc)或静态地为前。 s [10]像其他人一样建议。

现在您可能会问,为什么它可以在Windows上运行? 我要说的,纯粹是靠运气......