Это компилируется в x86, но когда я использовал его в конфигурации x64, переменные x и y не имеют адреса при попытке получить к ним доступ? Нужно ли какое-то дополнение для выравнивания по более крупному адресу? Использование MSVC ..Как это получить для компиляции для x64
#define ARR_SIZE 25
typedef struct {
unsigned int x;
unsigned int y;
}Stuff;
void allocateArray(Stuff *stuffArr) {
Stuff *stuff = malloc(sizeof (Stuff) * ARR_SIZE);
for (int i = 0; i < ARR_SIZE; i++) {
(*(stuff + i)) = (Stuff) { i, i + i };
}
for (int i = 0; i < ARR_SIZE; i++) {
printf("%d : %d\n", (stuff + i)->x, (stuff + i)->y);
}
stuffArr = stuff;
}
void deallocateArray(Stuff *stuffArr) {
free(stuffArr);
}
int main(){
Stuff * stuff = NULL;
allocateArray(stuff);
deallocateArray(stuff);
return 0;
}
Это не должно работать ни для архитектуры. Строка 'stuffArr = stuff;' изменяет локальную копию 'stuffArr'. Он не влияет на переменную 'stuff' в' main'. – user3386109
Кроме того, '(* (stuff + i))' такой же, как 'stuff [i]', а '(stuff + i) -> x' - это просто' stuff [i] .x' – user3386109
_the x и y переменные не имеют адреса при попытке доступа к ним: что это значит? –