Segfault только при печати - PullRequest
       29

Segfault только при печати

1 голос
/ 18 января 2012

У меня есть цикл, который выглядит примерно так:

while(condition){
  read_some_data(source, buf, BUFSIZE);
  printf(buf);
  memset(buf, 0, BUFSIZE+1);
  //do stuff to affect condition that does not touch buf
}

buf - это массив символов размером BUFSIZE+1.Странно то, что если я закомментирую printf, программа будет работать без ошибок сегментации.Только когда я пытаюсь распечатать buf, я получаю проблему.Кроме того, ошибка сегмента не обязательно происходит на первой итерации цикла.Обычно это занимает 6 или 7 итераций.

Кроме того, в этой программе нет динамического выделения памяти.

Ответы [ 5 ]

7 голосов
/ 18 января 2012
  • Убедитесь, что buf имеет нулевой (нулевой) байт где-то в выделенном диапазоне.Этот нулевой байт - это то, как printf может сказать, что он достиг конца строки;без него он продолжит читать, где может безопасно это сделать.
  • Убедитесь, что buf не содержит ничего подобного %d, которое printf может потребоваться для указания дополнительных аргументов.Еще лучше - просто используйте printf("%s", buf), что полностью исключает любой такой риск.
6 голосов
/ 18 января 2012

Вам не хватает аргумента спецификатора формата для printf

1 голос
/ 18 января 2012

Вам необходимо указать строку в качестве параметра печати: printf("%s", buf);.

Надеюсь, это поможет!
* 1005 N.S. *

1 голос
/ 18 января 2012

Убедитесь, что buf является \0 завершенной строкой. Только тогда printf() сможет распечатать строку.

0 голосов
/ 18 января 2012

Является ли оно нулевым? И почему вы вызываете printf (buf), а не put (buf), если все, что вам нужно, это записать buf в stdout?

...