[fd_set]C++11中出現內存溢出buffer overflow 而之前舊C++不會出現

在寫代碼時,發現一個出現一個問題,就是在舊版本C++編譯後,運行正常,當改爲C++11編譯時,就會出現buffer overflow detected,最後定位後發現在下面代碼中出現了問題

  fd_set fds;
  FD_ZERO(&fds);
  FD_SET(fd_, &fds);
  r = select(fd_ + 1, &fds, NULL, NULL, &time_val);

就是查詢設備是否可讀的代碼,最後查了相關的問題
Handling more than 1024 file descriptors, in C on Linux

Buffer Overflow in FD_SET in nb_connect
是和fd_set有關,但是爲什麼和C++11出現溢出,而舊版本正常的原因,還未知,什麼時候知道了,再更新博客
解決方法是使用poll或者epoll

 #include <poll.h>
  struct pollfd pfd_read;
  pfd_read.fd = fd_;
  pfd_read.events = POLLIN;//查詢事件是POLLIN
  r = poll(&pfd_read, 1, timeout);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章