0

我有这样的代码和平:

#include "Item.h"
#include "Object.h"

int main(){

    Item Pan(0);

    Pan.Prep2Cook();


    //Object(char*, int);

    Object Drawer(Pan.Oil_Memory, Pan.Oil_Size);


    Drawer.Search();

    Pan.OilId = Drawer.Oil();

    Pan.Finish_Cooking();


    return 0;
}

它按预期工作,但如果我将其更改为:

#include "Item.h"
#include "Object.h"

DWORD WINAPI Cooky(LPVOID);


int main(){

    // tried changing to 1000000000, still gives the error...
    // tried changing to 0, still gives the error...

    CreateThread(0,100000,Cooky,LPVOID(0),0,0);

    /*...
    Do_Other_Stuff();
    ...*/


    return 0;
}

DWORD WINAPI Cooky(LPVOID lParam)
{

    Item Pan(int (lParam) );

    Pan.Prep2Cook();

    Object Drawer(Pan.Oil_Memory, Pan.Oil_Size);//memory allocating error here

    Drawer.Search();

    Pan.OilId = Drawer.Oil();

    Pan.Finish_Cooking();

    return 0;

}

在“抽屉”类中分配内存时会出现问题,如下所示:

data1 = new unsigned char[size];//error here

data2 = new unsigned char[size2];

all_data = new unsigned char*[9];

编辑: size 和 size2 等于或小于 10000。

我尝试使用 Createthread 中的 dwStackSize 参数“操纵”,但它仍然给我错误...

欢迎任何有关如何解决此错误的建议。

4

1 回答 1

0

用这么少的代码很难说出你的错误是什么,但这里有一些你可能需要考虑的事情

你的主线程实际上在做什么

/*...
Do_Other_Stuff();
...*/

return 0; //this will immediatly end every single thread

重要的是,如果您尝试按原样运行代码,您的主线程将结束并退出您的程序,如果您的程序似乎在您未能分配内存时崩溃,这可能是因为它是您线程中的一项重要操作并且您的程序退出当您尝试分配内存时

其次,你分配给你的线程的堆栈大小是无关紧要的,因为分配失败是在堆上(因为你使用new),而且分配给很多堆栈可能会阻碍分配,因为你只有有限的内存(但这可能不是问题 )

于 2013-04-08T13:14:11.163 回答