【发布时间】:2017-01-21 22:52:42
【问题描述】:
这在 x86 中编译得很好,但是当我在 x64 配置中使用它时,当我尝试访问它们时 x 和 y 变量没有地址?是否需要某种填充来对齐更大的地址?使用 MSVC..
#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的本地副本。它对main中的变量stuff没有影响。 -
另外,
(*(stuff + i))与stuff[i]相同,而(stuff + i)->x只是stuff[i].x -
这是一个常见问题解答错误。让我看看能不能找到一个重复的。
-
显然我们没有规范的副本...我们应该创建一个,因为这是一个常见的错误。
-
那里,I made one。
标签: c pointers struct malloc 64-bit