草庐IT

c++ - 强类型能防止缓冲区溢出吗?

强类型(在本例中为char)是否可以防止缓冲区溢出?chara[100]charb[100]strcpy(a,unknownFunction);//unknownFunctioncouldoverflowb//sinceitslengthisunknownstrcpy(b,a);//canbstilloverflowawithitsnow,//potentiallyoverflowedsize? 最佳答案 没有。strcpy()会一直运行,直到找到空终止符('\0')。如果b[]不包含一个,它将遍历随机内存,直到最终找到一个。

c++ - 如何清除流字符串的缓冲区?

我在两个循环中有一个流字符串,它正在烧毁我的RAM。那么如何正确清除steamstring的缓冲区呢?就像这样简化:stringstreamss(stringstream::in|stringstream::out);for(){for(){val=2;ss它写了2然后22然后222...我试过.clear()或.flush()但不是那样。那我该怎么做呢? 最佳答案 显而易见的解决方案是每次都使用一个新的stringstream,例如:for(...){std::stringstreamss;for(...){//...}}这就是s

c++ - 如何仅给定相应的 id 来确定 GL 帧缓冲区对象的宽度和高度

我想确定帧缓冲区对象的大小(宽度、高度)。我通过创建了一个帧缓冲区对象//createtheFBO.glGenFramebuffers(1,&fboId);如何只给定帧缓冲区对象ID(fboId)来获取第一个颜色附件的大小?这是可能的还是我必须将颜色附件的大小存储在外部变量中以便以后知道FBO的大小? 最佳答案 您的问题有点困惑,因为您要求两个不同的东西。这是一个简单的问题:HowcanIgetthesizeofthefirstcolorattachmentgivenonlytheframebufferobjectid(fboId)

c++ - 如何分配可执行内存缓冲区?

我想分配一个可以在Win32上执行的缓冲区,但我在visualstudio中有一个异常,因为malloc函数返回一个不可执行的内存区域。我读到有一个NX标志可以禁用...我的目标是将字节码动态转换为asmx86,同时牢记性能。有人可以帮助我吗? 最佳答案 您不为此使用malloc。无论如何,你为什么要在C++程序中?但是,您也不会将new用于可执行内存。有Windows特定的VirtualAlloc保留内存的函数,然后使用VirtualProtect将其标记为可执行文件函数应用,例如,PAGE_EXECUTE_READ标志。完成后,

c++ - 如何在 C++ 中管理大缓冲区?

如果我在用C++编写的程序中需要一个大缓冲区,哪个更好?在堆中分配缓冲区,并在类中保留对该缓冲区的引用使用它的人。分配一个静态缓冲区,并使其成为全局缓冲区。 最佳答案 如何:3.使用vector。[编辑添加:或boost::array是一个不错的选择,如果您对依赖项感到满意] 关于c++-如何在C++中管理大缓冲区?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1213607/

c++ - C++ 字符串中会发生缓冲区溢出吗?

这是关于C++中的字符串。我已经很长时间没有接触C/C++了;事实上,大约7年前,我在大学的第一年才用这些语言进行编程。在C中,为了保存字符串,我必须创建字符数组(无论是静态的还是动态的,都无关紧要)。所以这意味着我需要提前很好地猜测数组将包含的字符串的大小。好吧,我在C++中应用了相同的方法。我知道有一个std::string类,但我一直没有抽出时间使用它。我的问题是,由于我们从未在std::string类中声明数组/字符串的大小,因此在写入时是否会发生缓冲区溢出。我的意思是,在C中,如果数组的大小是10,而我在控制台上键入了超过10个字符,那么额外的数据将被写入与数组相邻的某个其他

c++ - 从 void 指针缓冲区进行结构实例化

下面是一些我觉得很有趣的C++代码,但我知道它可以工作。定义了一个struct,在程序中我们使用void指针分配内存。然后使用分配的缓冲区创建结构。这是一些代码typedefstruct{charbuffer[1024];}MyStructintmain(){MyStruct*mystruct_ptr=0;void*ptr=malloc(sizeof(MyStruct));//ThisisthelinethatIdon'tunderstandmystruct_ptr=new(ptr)MyStruct();free(ptr);return0;}该代码包含更多内容,但这就是它的要点。我还没

c++ - 为什么在访问整数时缓冲区溢出会导致段错误?

在从函数A()调用函数B()期间,B()分配一个100个字符的数组并多次填充它,包括一次用101个字符的字符串和一次用110个字符的字符串。这是一个明显的错误。稍后,函数A()试图访问完全不相关的int变量i,并发生段错误。我明白为什么会发生缓冲区溢出,但是为什么我在访问这个整数时会出现段错误?为什么我获取不到垃圾数据? 最佳答案 缓冲区溢出可能会破坏堆栈上先前保存的帧指针版本。当函数返回时,这个损坏的版本被加载到帧指针寄存器中,导致您描述的行为。Wikipedia'spage包含一个数字和定义。

c++ - 如何访问 std::vector 的内部连续缓冲区,我可以将它与 memcpy 等一起使用吗?

如何访问std::vector中使用的连续内存缓冲区,以便我可以对其执行直接内存操作(例如memcpy)?此外,在该缓冲区上执行诸如memcpy之类的操作是安全的吗?我读过标准保证vector在内部使用连续的内存缓冲区,但它不一定作为动态数组实现。我认为鉴于它绝对是连续的,我应该能够这样使用它-但我不确定vector实现是否将簿记数据存储为该缓冲区的一部分。如果是这样,那么诸如memcpyvector缓冲区之类的操作将破坏其内部状态。 最佳答案 实际上,几乎所有编译器都将vector实现为引擎盖下的数组。您可以通过执行&someve

c++ - C++中getline的缓冲区大小限制

我有一个简单的C++程序,它逐行读取文件。有些行包含超过20000个字符。下面的程序只能读取那些大行的4095个字符。我认为这是因为缓冲区大小限制。读取大行的解决方案是什么?//readingatextfile#include#include#includeusingnamespacestd;intmain(){stringline;ifstreammyfile("new.fasta");if(myfile.is_open()){while(getline(myfile,line)){cout 最佳答案 试试sed${n}p|wc在