gpt4 book ai didi

c - 我如何让它编译为 x64

转载 作者:行者123 更新时间:2023-11-30 18:18:26 27 4
gpt4 key购买 nike

这在 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;
}

最佳答案

正如用户3386109所说,代码不正确。也许您期望 allocateArray() 函数返回分配的指针,而您按值传递指针,以便 main() 内的变量 stuff 不会更新。

您可以:

  • allocateArray() 签名更改为 void allocateArray(Stuff **stuffArr)
  • allocateArray() 签名更改为 Stuff *allocateArray()

(恕我直言,第二个会更惯用和清晰)。

我会把它写成:

Stuff *allocateArray(size_t count) {
Stuff *stuff = (Stuff *) malloc(sizeof (Stuff) * count);

if (! stuff)
return NULL;

for (int i = 0; i < count; i++) {
stuff[i].x = i;
stuff[i].y = 2 * i;

printf("%d : %d\n", stuff[i].x, stuff[i].y);
}

return stuff;
}

void deallocateArray(Stuff *stuffArr) {
if (stuffArr)
free(stuffArr);
}

int main(){
Stuff * stuff = allocateArray(ARR_SIZE);
deallocateArray(stuff);

return 0;
}

关于c - 我如何让它编译为 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39485246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com