我有一个简单的字节数组结构:
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]);
}
}
有人能看出我做错了什么吗?
最佳答案
byte_array_print(r->PRG->arr);
传递定义为ByteArray
结构元素的分配缓冲区,但byte_array_print
期望一个指向完整ByteArray
结构的指针,而不是指向缓冲。修复它:
byte_array_print(r->PRG)
关于在函数调用中无法访问 C uint8_t 数组内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707928/