我有一个练习,其中我创建了一个生成随机字符串的函数!当我在Windows中运行该程序时它工作正常,但当我尝试在linux中运行相同的程序时,我得到一个分段错误。我在linux上做了调试 我走了这个:
**程序接收信号SIGSEGV,分段故障。 get_unique_name()()**
中的0x08048be5get_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 ;
}
答案 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上运行? 我要说的,纯粹是靠运气......