我有一个简单的字节数组结构:
typedef struct ByteArray {
int size;
uint8_t* arr;
} ByteArray;
我正是这样创造的:
ByteArray* byte_array_create(size_t size) {
ByteArray* a = malloc(sizeof(ByteArray));
a->size = size;
a->arr = (uint8_t*)malloc(a->size);
return a;
}
稍后我在另一个模块中使用它:
static void rom_set_prg_bank(Rom* r, iNESHeader* h, FILE* romFile) {
r->PRG = byte_array_create(h->numPRG * 0x4000);
size_t size = fread(r->PRG->arr, r->PRG->size, 1, romFile);
byte_array_print(r->PRG->arr);
}
现在在rom_set_prg_bank()内部r-> PRG-> arr已经分配了内存,一切看起来都不错。我可以查看内存块并查看所有内容。一旦进入byte_array_print(),我就会遇到错误的访问错误。
void byte_array_print(ByteArray* a) {
for(int i = 0; i < a->size; i++) {
// EXC_BAD_ACCESS (code=EXC_I386_GPFLT) happens
// when I try to access any of the values in the
// byte array
printf(a->arr[i]);
}
}
谁能看到我做错了什么?
答案 0 :(得分:0)
byte_array_print(r->PRG->arr);
传递定义为ByteArray
结构元素的已分配缓冲区,但byte_array_print
需要指向完整ByteArray
结构的指针,而不是缓冲区。修复它:
byte_array_print(r->PRG)