堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
2014-02-27 22:46
381 查看
今天在写socket编程的时候,碰到一个很怪异的问题,调试程序的位置为:test dword ptr [eax],eax ; probe page.
这是什么问题呢?
经过查证才知道:
这跟局部数组变量定义所分配的最大空间设置大小有关。
局部变量的申请空间是存放于栈中,windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
[cpp] view plaincopy
有两个程序
A:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int nArray[256000] = {0};
nArray[1] = 5;
printf("array 1 is %d",nArray[1]);
return 0;
}
B:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int nArray[260000] = {0};
nArray[1] = 5;
printf("array 1 is %d",nArray[1]);
return 0;
}
A可以正常运行,B虽然编译通过了,可是当运行时就会弹出错误。
所以解决此问题的方法就是扩大栈空间的大小
方法为
项目->属性->链接器->系统->堆栈保留大小
注:这里填的是字节数
如果你想把他扩大为2M的话,
1024*1024*2 = 2097152
然后再编译运行的话A,B就都可以通过了
这是什么问题呢?
经过查证才知道:
这跟局部数组变量定义所分配的最大空间设置大小有关。
局部变量的申请空间是存放于栈中,windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
[cpp] view plaincopy
有两个程序
A:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int nArray[256000] = {0};
nArray[1] = 5;
printf("array 1 is %d",nArray[1]);
return 0;
}
B:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int nArray[260000] = {0};
nArray[1] = 5;
printf("array 1 is %d",nArray[1]);
return 0;
}
A可以正常运行,B虽然编译通过了,可是当运行时就会弹出错误。
所以解决此问题的方法就是扩大栈空间的大小
方法为
项目->属性->链接器->系统->堆栈保留大小
注:这里填的是字节数
如果你想把他扩大为2M的话,
1024*1024*2 = 2097152
然后再编译运行的话A,B就都可以通过了
相关文章推荐
- 堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
- 怪异问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
- [原创]局部数组变量定义超过所分配的最大空间时报错“test dword ptr [eax],eax ; probe page”
- 堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)
- 堆栈溢出问题 test dword ptr [eax],eax probe page.
- C++ stack overflow 局部数组变量定义超过所分配的最大空间
- test dword ptr [eax],eax ; probe page.调试中断解决方案
- test dword ptr [eax],eax ; probe page.
- test dword ptr [eax],eax ; probe page.
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- test dword ptr [eax],eax ; probe page. 分页出错
- test dword ptr [eax],eax ; probe page.--VS报错!
- test dword ptr [eax],eax ; probe page.
- test dword ptr [eax],eax ; probe page.
- 堆栈溢出问题 test dword ptr [eax],eax ; probe page错误
- 关于c语言中自动变量(局部自动变量)的空间的分配的问题
- 全局变量,静态局部变量,局部变量空间的堆分配和栈分配问题
- 解决vc++DEBUG ERROR问题前几天师弟调试程序的时候出现了这样一个错误,出错的位置是在delete [] 一个动态分配的数组时出现的。 经过调查发现错误是因为他之前在给数组赋值的时候越界了
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- 关于字符串,字符数组 ,局部和全局地址分配问题