Я имею ниже фрагмент кода, который выделяет память из границ:таНос Выделяет Из Bound памяти Адрес
char *str1 = (char *) malloc(sizeof(char) * BUF_SIZE);
printf ("str1 = ");
scanf("%s", &str1);
int n = strlen(str1);
Изначально я получал Segmentation Fault
в strlen()
. После игры с gdb я узнал, что str1
был на адресе, который был вне пределов. Ниже показан вывод gdb.
(gdb) print str1
$1 = 0x636261 <Address 0x636261 out of bounds>
Примечание: Точка прерывания был установлен на линии, где strlen()
называется. Также BUF_SIZE
: #define BUF_SIZE 10
Любая помощь была бы принята с благодарностью. Спасибо :)
Добавить 'memset (str, 0, BUFSIZE)' перед 'чтением' в него – ForceBru
Вместо этого использовать 'scanf' использовать' fscanf' или 'fgets'. – Algo
@ Алго: Почему? Обычно я советую против '* scanf()' самостоятельно, но в этом случае это вряд ли проблема, особенно если предположить, что вместо нее используется 'fscanf()', которая имеет те же проблемы, что и 'scanf()' ...? – DevSolar