UINT Storedata(LPVOID pParam)
{
int i;
         //Store data buff
int pStoreBuf_M1_C1[16384*4
int pStoreBuf_M1_C2[16384*4];
int pStoreBuf_M1_C3[16384*4];
int pStoreBuf_M1_C4[16384*4];
int pStoreBuf_M1_C5[16384*4];
int pStoreBuf_M1_C6[16384*4];
int pStoreBuf_M1_C7[16384*4];
int pStoreBuf_M1_C8[16384*4];

return 0; 
}只要一加入上面那几个临时的buffer,程序就出问题,要么强制中断,要么显示“应用程序发生异常,unknown software exception (0xc00000fd),位置为0x00407297”这是不是内存溢出啊?该怎么处理

解决方案 »

  1.   

    不好意思,刚才拷贝的时候,漏掉了一个中括号int pStoreBuf_M1_C1[16384*4]
      

  2.   

    这么多的内存应该在堆上分配,用new,malloc
    栈没这么大
      

  3.   

    这样可以了,是否规范?
    int * pStoreBuf_M1_C1,* pStoreBuf_M1_C2,* pStoreBuf_M1_C3,* pStoreBuf_M1_C4,* pStoreBuf_M1_C5,* pStoreBuf_M1_C6,* pStoreBuf_M1_C7,* pStoreBuf_M1_C8;
    pStoreBuf_M1_C1=new int[16384*4];
    pStoreBuf_M1_C2=new int[16384*4];
    pStoreBuf_M1_C3=new int[16384*4];
    pStoreBuf_M1_C4=new int[16384*4];
    pStoreBuf_M1_C5=new int[16384*4];
    pStoreBuf_M1_C6=new int[16384*4];
    pStoreBuf_M1_C7=new int[16384*4];
    pStoreBuf_M1_C8=new int[16384*4];
    另外,还想请教一下,你说的栈没这么大,那栈大概有多大?以后设得时候也好有个参考
      

  4.   

    而且,离开这个线程的时候还要delete掉,是吧?
    delete pStoreBuf_M1_C1;
            delete pStoreBuf_M1_C2;
    delete pStoreBuf_M1_C3;
    delete pStoreBuf_M1_C4;
    delete pStoreBuf_M1_C5;
    delete pStoreBuf_M1_C6;
    delete pStoreBuf_M1_C7;
    delete pStoreBuf_M1_C8;
      

  5.   

    方法一:STACKSIZE   定义.def文件    语法:STACKSIZE reserve[,commit]
        reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小方法二:设定/STACK     打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
    在Reserve中设定堆栈的最大值和commit。注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较
    大会使栈开辟较大的值,可能增加内存的开销和启动时间 
      

  6.   

    再补充一点,分配这么大的内存据说创建一个辅助堆还是要比new,alloc好使的,
    HeapCreate(...)自己去看一下