Sss*_*Sss 2 c++ buffer types buffer-overflow
我正在做一个visual c ++应用程序并尝试将大小分配给缓冲区(该缓冲区进一步用于存储流的内容).如果声明缓冲的大小小于那么没有问题
const int size= 319000; //here there is no problem
Run Code Online (Sandbox Code Playgroud)
但是为了从流中访问我想要的一些数据,我需要声明这样大小的缓冲区 -
const int size=4348928;//this size cause the problem
char buffer[size+1];
HRESULT hr = pStream->Read(buffer, size, &cbRead );
Run Code Online (Sandbox Code Playgroud)
虽然代码的最后两行对我的问题没有任何作用,但它只是让你知道我正在用这个缓冲区的大小做什么.
但是,当我声明这个大小时,它什么也没做(我的意思是我的视觉应用程序功能如下:如果你单击一个文件,它会生成一个流,我将该流存储在缓冲区中 - 如果我声明大小为319000的顺序程序运行正常,当大小增加到4348928它甚至不工作 - 当然没有错误)
如果buffer是局部变量,那么您尝试在堆栈上分配数组.堆栈通常处于低兆字节范围内(如1到4).您尝试分配超过 4兆字节,这将无法正常工作.
解决这个问题的简单方法是从堆中动态分配它:
char* buffer = new char[size + 1];
// Do operations on `buffer`
delete[] buffer;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |