我正在为一个叫做海龟的uni项目编写一个程序,用户基本上在文本文件中输入一系列命令(前30,右20等),然后程序相应地绘制线条。不过,我收到了一个非常奇怪的错误消息,并且几乎没有关于它可能在哪里的线索。这是错误消息(并不总是出现,有时只是seg故障):
objc[2139]: Method cache corrupted. This may be a message to an invalid object, or a memory error somewhere else.
objc[2139]: unused 0x0, SEL 0x7fff8eb29c08, isa 0x7fff743d7c90, cache 0x7fff743d7ca0, buckets 0x10020c990, mask 0x3, occupied 0x1, wrap bucket 0x10020c990
objc[2139]: unused 0 bytes, buckets 64 bytes
objc[2139]: selector 'initialize'
objc[2139]: isa 'NSOrderedSet'
objc[2139]: Method cache corrupted.
当程序退出时,Xcode指向以下代码:
SDL_Window *window = SDL_CreateWindow("Turtles", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
在此函数中:
/**
Create SDL window and handle errors
*/
SDL_Window *createWindow() {
SDL_Window *window = SDL_CreateWindow("Turtles", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
/*window = SDL_CreateWindow("Turtles", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);*/
if(window == NULL) {
fprintf(stderr, "Failed to create window\n");
exit(EXIT_FAILURE);
}
return window;
}
我不认为这个函数有问题,因为我以前已经用过无数次了。不过,对于真正的问题可能在哪里,我没有其他线索。我花了几个小时查看程序中的每一行,并使用printf试图解决它,但没有运气……
以下是完整程序的链接(编辑:新链接,修复了指出的一些错误):
https://github.com/mtalu/turtles/commit/5bb499bfe80fe780bb1f632adee44e9a3df2d369
(两个c文件和一个输入文本文件)
如果您能帮助/建议我诊断这个问题,我将不胜感激,谢谢!
发布于 2015-01-13 03:43:47
在你的main.c中
下面是第一个调用代码::
printf("Creating display\n");
Display *d;
d = getDisplay(d);
在你的my_sdl_setup.c中
Display *getDisplay(Display *newDisplay)
{
printf("Creating static display pointer\n");
static Display *d;
if(newDisplay) {
printf("New display object provided, initializing!\n");
printf("Mallocing space for display pointer\n");
d = (Display *) malloc(sizeof(Display));
if(d == NULL) {
printf("Malloc failed in getDisplay\n");
}
printf("Initializing SDL\n");
initializeSDL();
.....
}
return d;
}
如果main.c的
Display *d;
在这种情况下,您希望编译器自动将d初始化为NULL。然后,您的代码将在初始化SDL时工作得很好。但d未初始化,但不是0(或NULL),则您的SDL Init将不会调用正确的时间。
另外,你的问题是关于Graphix Init的问题。还有木头。所以,首先检查这个问题。
这是不同于调试模式或发布模式的编译器。
https://stackoverflow.com/questions/27908200
复制相似问题