【发布时间】:2010-09-01 14:22:38
【问题描述】:
我正在用 Objective-C 编写一个项目,但由于涉及到 OpenGL,所以我非常依赖普通的旧 C。
我有一个数据块,我通过以下方式从文件中读取到内存:
NSString *path = [[NSBundle mainBundle] pathForResource:@"iPadTest" ofType:@""];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];
data = [file readDataToEndOfFile];
currentImage = [ReadDataFiles getOrganizedImageData:data];
最后一个函数为我提供了一个结构,其中数据更易于访问,但仍然存在三个冗长的图像数据数据块。开头是这样的:
ImageData *organizedImageData = malloc(sizeof(ImageData));
// IMAGE DIMENSIONS
UInt64 *rawData = (UInt64 *) data.bytes;
organizedImageData->imageDimensions.x = *rawData;
rawData++;
organizedImageData->imageDimensions.y = *rawData;
rawData++;
organizedImageData->imageDimensions.z = *rawData;
// IMAGE 1
rawData++;
organizedImageData->image1Data = (UInt8*)rawData;
// IMAGE 2
rawData++;
organizedImageData->image2Data = (UInt8*)rawData;
// etc...
问题在于,当数据到达 OpenGL 函数时,其他内容已写入同一内存。结果每次都不一样,但数据永远不会持久。
当我告诉调试器在更改这些地址时暂停时,我最终会得到我无法做出任何事情的汇编代码。
我应该如何以及在哪里分配内存空间,以便程序的其余部分不会被它欺骗?
【问题讨论】:
-
调试器在调用堆栈上显示什么?这给你一个线索吗?
-
你能说出ImageData的结构是什么样的吗?
标签: objective-c c memory memory-management