strcat вызывает ошибку сегментации - PullRequest
0 голосов
/ 24 ноября 2011

Это вызывает ошибку сегментации:

char str1[60];
char**array;

array=malloc( str_nos * sizeof(char *) );
array[i]=malloc( str_len * sizeof(char *) );

strcat(array[i],str1);
strcat(array[i]," ");

str1 взято из scanf и оно короче 60 символовarray[i] из динамического массива строк.

Есть ли у вас какие-либо идеи о том, что вызывает проблему?Это происходит только на большое количество scanf с.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Как минимум две возможности:

  • Если в буфере, указанном array[i], недостаточно места, вы перезапишите конец буфера, что частов ошибке сегмента.

  • Одна из строк не заканчивается должным образом нулем, поэтому strcat просто начинает проходить по памяти.

1 голос
/ 24 ноября 2011

Либо array[i] указывает на никуда, либо длина буфера, на который указывает array[i], недостаточна.

РЕДАКТИРОВАТЬ: Согласно опубликованному вами коду, буфер, обозначенный array[i], изначально содержит неинициализированный мусор. Вы не можете применить strcat к целевому буферу, который содержит неинициализированный мусор.

Либо сделайте так, чтобы ваш буфер содержал пустую строку, прежде чем пытаться strcat что-либо сделать с ней

array[i][0] = '\0';
strcat(array[i],str1);
strcat(array[i]," ");

или, альтернативно, начните с strcpy, а затем выполните strcat

strcpy(array[i],str1);
strcat(array[i]," ");
0 голосов
/ 24 ноября 2011
array[i]=malloc( str_len * sizeof(char *) );

Что здесь i?Если i не находится в диапазоне [0,str_len), значит, вы обращаетесь к памяти, которой у вас может не быть разрешения на использование ...

...