草庐IT

c++ - c中for循环中的缓冲区数组溢出

什么时候程序会在缓冲区溢出的情况下崩溃#include#includemain(){charbuff[50];inti=0;for(i=0;i分配的前50个字节会发生什么情况,程序何时会崩溃?我在带有gcca.out的UBUNTU中看到它在我99时崩溃>>buff[99]=99***stacksmashingdetected***:./a.outterminatedAborted(coredumped)我想知道为什么当赋值发生在for循环中的buff[51]时不会崩溃? 最佳答案 是undefinedbehavior.您永远无法预测

c++ - 如何将 ostream 对象重定向到临时缓冲区?

我有一个C++代码,它有很多接收ostream作为参数的函数。我想对这些函数进行单元测试,因为我必须在执行函数后验证ostream对象数据。我可以将输出流重定向到一个文件,但我想检查我是否可以创建一个临时缓冲区并将输出流重定向到该缓冲区并从该缓冲区读取。 最佳答案 您可以使用std::stringstream作为内存中的std::ostream:#include#include#includevoidmy_func(std::ostream&out){out 关于c++-如何将ostre

c++ - 如果 cout.rdbuf() 用于切换缓冲区并且从不将其设置回去,会出现什么问题?

作者介绍thiscode在标题Abuserroronmyplatform下#include#includeintmain(){std::ofstreamlog("oops.log");std::cout.rdbuf(log.rdbuf());std::cout字符串“Oops!\n”被打印到文件“oops.log”。代码没有恢复cout的streambuf,但是VS2010没有报运行时错误。 最佳答案 由于log和std::cout共享一个缓冲区,该缓冲区可能会被释放两次(一次是在log超出范围时,然后在程序终止时再一次)。这会导致

[操作系统安全]缓冲区溢出

一、C栈帧结构函数调用内存中的三个区域,代码区、静态数据区、动态数据区(压栈和清栈就是在这个区域完成的)。CPU中有三个寄存器,分别是eip、ebp和esp。eip永远指向代码区中将要执行的下一条指令,执行方式包括顺序执行和跳转;ebp和esp用于管理栈空间,ebp指向栈底,esp指向栈顶,代码区中的函数调用、返回和执行都伴随着不断的压栈和清栈,在调用函数时,ebp会指向PreviousFramePointer以在执行函数之后返回到原来的地址。栈中数据存储和释放的原则:后进先出。二、实验原理1、缓冲区溢出是因为在程序执行时数据的长度超出了预先分配的空间大小,导致覆盖了其他数据的分配区域,从而执

c++ - 用于计算循环缓冲区中剩余空间的简化算法?

我想知道是否有比这更简单(单一)的方法来计算循环缓冲区中的剩余空间?intremaining=(end>start)?end-start:bufferSize-start+end; 最佳答案 如果您担心预测不佳的条件会减慢您的CPU流水线,您可以使用这个:intremaining=(end-start)+(-((int)(end但这可能是过早的优化(除非您确实将其确定为热点)。坚持使用您当前的技术,这更具可读性。 关于c++-用于计算循环缓冲区中剩余空间的简化算法?,我们在StackOv

C++ 字符串使用分配的最大缓冲区?

我声明了一个变量strings;并执行s="abc";现在它有3个字符的缓冲区。之后s="abcd"它有一个4个字符的缓冲区。现在在第三条语句之后s="ab"问题是它会保留4个字符的缓冲区还是会重新分配2个字符的缓冲区?如果它将分配2个字符的缓冲区,有什么方法可以告诉它保留分配的最大缓冲区。那么它是否保留了曾经分配的最大大小的缓冲区?s="ab"s="abc"s="a"s="abcd"s="b"现在它应该保留一个大小为4的缓冲区。这可能吗? 最佳答案 字符串在分配后将保留其缓冲区,并且仅在需要更大的缓冲区时才重新分配。它也可能以大于

c++ - 从 char* 缓冲区读取 int32_t 的惯用 cpp14 方法是什么?

给定一个包含int(小端)的字符缓冲区c。如何读作int32_t?我写了这段代码,但感觉不符合cpp的习惯。int32_tv;char*p=(char*)&v;for(inti=0;i 最佳答案 将binary数据从char*缓冲区复制到任何其他数据类型的唯一可移植方法是使用memcpy(或等效字节-copyingmerhodsuchasstd::copy或你自己的模仿这种行为的方法)。memcpy(&my_number,my_buffer,sizeof(my_number));当然,缓冲区应该包含给定数据类型的正确位。如果它源于在

ios - NSInputStream 缓冲区的大小

我正在尝试使用NSInputStream通过TCP套接字连接接收数据。在服务器端,我先发送数据大小,然后再发送数据本身。在iOS客户端,我需要从NSInputStream中提取前4个字节,因为我需要检查数据大小是否已完全接收,但我遇到了问题:...caseNSStreamEvent.HasBytesAvailable:if(aStream==inputstream){while(inputstream.hasBytesAvailable){varreadBufferRef=UnsafeMutablePointer>()varreadBufferLengthRef=0letreadBuf

ios - 如何使用图像纹理数据创建 OffScreen 缓冲区

我想创建一个加载图像的离屏缓冲区。当用户执行更改时,必须在OffscreenBuffer中的纹理中完成更改。 最佳答案 您可以使用UIGraphicsImageRenderer绘制到屏幕外上下文并取回UIImage。它就像其他图形上下文一样,因此所有Coregraphics和UIKit绘图方法都在UIGraphicsImageRenderer中工作。 关于ios-如何使用图像纹理数据创建OffScreen缓冲区,我们在StackOverflow上找到一个类似的问题:

使用FlatBuffers从C#序列化到本机存储器缓冲区

有可能与flatbuffers在C#中将对象序列化为本机(未托管的)内存缓冲区?所以我想做以下步骤:从本机内存分配本机内存缓冲区在C#中创建对象,然后将它们序列化到分配的缓冲区中将此内存缓冲区发送到C++以进行验证我在思考C#中的某些自定义内存缓冲区分配器,或者是将内存缓冲区表格C#的所有权转移到C++的某种方式。通常,我想避免在将数据从C#发送到C++时复制内存,反之亦然。我希望在C#和C++之间共享此内存缓冲区。我怎么做?看答案不,当前的FlatBuffers实现很难编码为常规字节数组。之后,您可以将此数组复制到本机内存,也可以像@pm100所说的那样,将其固定。FlatBuffer中的所