2016-01-03 7 views
0

У меня есть упражнение, в котором я создал функцию, которая генерирует случайную строку! Когда я запускаю программу в Windows, она работает нормально, но когда я пытаюсь запустить ту же программу в Linux, я получаю ошибку сегментации. Я сделал отладку в linux , и я так:Ошибка сегментации случайной строки генератора

** Программный сигнал SIGSEGV, ошибка сегментации. 0x08048be5 в get_unique_name()() **

Код 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 ; 
} 
+0

Hi. Ваш динамический массив не выделен. Ваша ошибка в основном означает, что вы пытаетесь получить доступ к памяти, которая вам недоступна. Взгляните сюда, например: http://web.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html – scana

ответ

0

Вы не инициализировать s указатель.

с помощью массива решает проблему:

char s[4]; 
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; не потребуется (необходимо удалить).

0

s - указатель, который должен указывать на какое-либо место в памяти. Затем вы можете сохранить некоторые данные (бит) в этой ячейке памяти. Просто определяя (char * s) указатель сам по себе не выделяет память, на которую указывает указатель, вам нужно явно указать указатель на ячейку памяти, которую вы должны сначала распределить динамически (malloc/calloc/new etc) или статически для ex. s [10], как и другие люди.

Теперь вы можете спросить, почему это работает в Windows? , к которому я бы сказал, просто удачи ...

Смежные вопросы