저는 C로 ASCII 게임 엔진을 만들고 C++로 프로그램을 작성하여 연습 한 자습서를 통해 작업하고 있습니다. 저는 현재 Image 구조체의 형태로 힙에 이미지 데이터를 할당하는 작업을하고 있습니다 (int 너비, int 높이 및 char 배열을 보유하고있는 힙의 위치에 대한 두 개의 char 포인터 포함 [width * height]). 크기) ... 그러나 새로운 연산자를 호출하는 데 문제가 있습니다. 내가 구조체 자체뿐만 아니라 문자와 컬러 데이터에 대한 메모리를 할당하고있어 기능은 다음과 같습니다new operator (C++)를 호출 할 때 프로그램이 충돌 함
(이 함수를 두 번 호출되는) 주요 기능 자체는 다음과 같습니다Image *allocateImage(int width, int height) {
Image *image;
image = new Image;
if (image == NULL)
return NULL;
image->width = width;
image->height = height;
image->chars = new CHAR[width * height];
image->colours = new COL[width * height];
//image->colours = (CHAR*) PtrAdd(image->chars, sizeof(CHAR) + width * height);
for (int i = 0; i < width * height; ++i) { //initializes transparent image
*(&image->chars + i) = 0;
*(&image->colours + i) = 0;
}
return image;
}
: 실제로는 allocateImage에 두 번째 호출에 충돌로 기능 곳의 지점에, 전에, 조금 - 사람이 필요 느낀다, 그러나 프로그램은이 지점에 도달하면
int main() {
int x, y, offsetx, offsety;
DWORD i;
srand(time(0));
bool write = FALSE;
INPUT_RECORD *eventBuffer;
COLORREF palette[16] =
{
0x00000000, 0x00800000, 0x00008000, 0x00808000,
0x00000080, 0x00800080, 0x00008080, 0x00c0c0c0,
0x00808080, 0x00ff0000, 0x0000ff00, 0x00ffff00,
0x000000ff, 0x00ff00ff, 0x0000ffff, 0x00ffffff
};
COORD bufferSize = {WIDTH, HEIGHT};
DWORD num_events_read = 0;
SMALL_RECT windowSize = {0, 0, WIDTH - 1, HEIGHT - 1};
COORD characterBufferSize = {WIDTH, HEIGHT};
COORD characterPosition = {0, 0};
SMALL_RECT consoleWriteArea = {0, 0, WIDTH - 1, HEIGHT - 1};
wHnd = GetStdHandle(STD_OUTPUT_HANDLE);
rHnd = GetStdHandle(STD_INPUT_HANDLE);
SetConsoleTitle("Title!");
SetConsolePalette(palette, 8, 8, L"Sunkure Font");
SetConsoleScreenBufferSize(wHnd, bufferSize);
SetConsoleWindowInfo(wHnd, TRUE, &windowSize);
for (y = 0; y < HEIGHT; ++y) {
for (x = 0; x < WIDTH; ++x) {
consoleBuffer[x + WIDTH * y].Char.AsciiChar = (unsigned char)219;
consoleBuffer[x + WIDTH * y].Attributes = FOREGROUND_BLUE;
}
}
write = TRUE;
Image *sun_image = allocateImage(SUNW, SUNH);
Image *cloud_image = allocateImage(CLOUDW, CLOUDH);
setImage(sun_image, SUN.chars, SUN.colors);
setImage(cloud_image, Cloud.chars, Cloud.colours);
나는 더 많은 코드를 게시 할 수 있습니다 새 연산자가 호출됩니다. 프로그램은이 시점까지는 잘 작동했습니다. 최근에는 힙 (이미지 크기 변경이 가능한 이미지 생성 용)뿐만 아니라 할당 해제 (이 프로그램에서는 도달하지 못함)에 이미지 데이터를 할당하는 기능이 새로 추가되었습니다. . 에서 배우고있는 프로그램이 C로 작성 되었기 때문에 소스 코드를 보는 것이 도움이되지 않는 곳이기도합니다. Google도 그다지 도움이되지 않았습니다. 누가 잘못 될지 가르쳐 줄 수 있습니까? image
이미 포인터이기 때문에
이미지 * 이미지 = 새 이미지(); (괄호 추가) - COL이 기본 유형이 아니라면 초기화 로직도 모호하게 보입니다. – holtavolt
매개 변수가없는 경우 괄호는 선택 사항입니다. – Gary
죄송합니다. 정의를 추가해야합니다. CHAR과 COL은 모두 부호없는 문자로 정의됩니다. –