之前發生堆棧溢出異常,在它甚至可以向控制檯寫入「Start」一瞥之前,我會遇到堆棧溢出異常。使用vs2010編譯(並執行)此C++代碼時,在進入main()
我使用的所有頭文件都包含在stdafx.h中,但這顯然不是這裏的問題(直接包含頭文件時也是這個問題)。
堆棧跟蹤如下:
> msvcr100d.dll!__set_flsgetvalue() Zeile 145 + 0xc Bytes C
msvcr100d.dll!_getptd_noexit() Zeile 500 C
msvcr100d.dll!_getptd() Zeile 523 + 0x5 Bytes C
msvcr100d.dll!_LocaleUpdate::_LocaleUpdate(localeinfo_struct * plocinfo) Zeile 243 + 0x5 Bytes C++
003efe3c()
TerrainGenerator.exe!pre_cpp_init() Zeile 298 + 0x21 Bytes C
任何幫助將不勝感激,我在C++中絕對的初學者,你可能在代碼風格看,我想每一件事擺脫這個煩人的問題,如甚至沒有宣佈一個額外的功能等...請幫助我,並不要猶豫,問你是否需要額外的信息。 在此先感謝。
#include "stdafx.h"
int main(int argc, char* argv[])
{
puts("Start");
const int res = 4096;
srand(time(NULL));
uint16_t data[(res+1)*(res+1)];
uint16_t variance = 2000;
int seed = 1337;
data[0] = ((seed>>1)+(int)(rand()/(RAND_MAX*(seed+(seed>>1)))));
data[res] = ((seed>>1)+(int)(rand()/(RAND_MAX*(seed+(seed>>1)))));
data[res*res] = ((seed>>1)+(int)(rand()/(RAND_MAX*(seed+(seed>>1)))));
data[res*(res+1)] = ((seed>>1)+(int)(rand()/(RAND_MAX*(seed+(seed>>1)))));
int count = 0;
for(int size=res;size>=1;size=size>>1,variance=variance>>1)
{
count++;
for(int x=size;x<res;x+=size<<1)
{
for(int y=size;y<res;y+=size<<1)
{
data[x*res+y] = data[(x-size)*res+(y-size)] + data[(x-size)*res+(y+size)] + data[(x+size)*res+(y-size)] + data[(x+size)*res+(y+size)];
data[x*res+y] /= 4;
data[x*res+y] += (variance>data[x*res+y])?(-(data[x*res+y]^2/variance)+(int)(rand()/(RAND_MAX*(data[x*res+y]^2/variance)))):(-variance+(int)(rand()/(RAND_MAX*variance*2)));
}
}
for(int x=0;x<res;x+=size)
{
for(int y=0;y<res;y+=size)
{
if(x!=res-1)
{
data[(x+(size>>1))*res+y] = data[x*res+y] + data[(x+size)*res+y] + ((y!=res-1)?data[(x+(size>>1))*res+(y+(size>>1))]:0) + ((y!=0)?data[(x+(size>>1))*res+(y-(size>>1))]:0);
data[(x+(size>>1))*res+y] /= (y!=res-1&&y!=0)?4:3;
data[(x+(size>>1))*res+y] += (variance>data[(x+(size>>1))*res+y])?((-(data[(x+(size>>1))*res+y]^2/variance)+(int)(rand()/(RAND_MAX*(data[(x+(size>>1))*res+y]^2/variance))))):(-variance+(int)(rand()/(RAND_MAX*variance*2)));
}
if(y!=res-1)
{
data[x*res+(y+(size>>1))] = data[x*res+y] + data[x*res+(y+size)] + ((x!=res-1)?data[(x+(size>>1))*res+(y+(size>>1))]:0) + ((x!=0)?data[(x-(size>>1))*res+(y+(size>>1))]:0);
data[x*res+(y+(size>>1))] /= (x!=res-1&&x!=0)?4:3;
data[x*res+(y+(size>>1))] += (variance>data[x*res+(y+(size>>1))])?((-(data[x*res+(y+(size>>1))]^2/variance)+(int)(rand()/(RAND_MAX*(data[x*res+(y+(size>>1))]^2/variance))))):(-variance+(int)(rand()/(RAND_MAX*variance*2)));
}
}
}
}
size_t Count = res*res;
uint16_t* Block = data;
char* Path = "export.raw";
if(!Block) return false;
FILE * filePointer = NULL;
errno_t error = fopen_s(&filePointer, Path, "wb");
if(error) return false;
fwrite(Block, sizeof(uint16_t), Count, filePointer);
fclose(filePointer);
return true;
return 0;
}
@ user384706:這會如何改善情況? – 2012-04-28 19:03:07
看起來像堆棧溢出! – 2012-04-28 19:03:28