gpt4 book ai didi

c - 为什么我在通过 int 转换后得到 EXC_BAD_ACCESS?

转载 作者:行者123 更新时间:2023-12-04 05:55:16 41 4
gpt4 key购买 nike

在下面的代码中,我得到一个 EXC_BAD_ACCESS当我调用打印顶点时,没有明显原因的错误。指针指向完全​​相同的位置,但是当我传入 vp2 时它以某种方式崩溃了。

#include <stdio.h>

typedef struct {
float x;
float y;
float z;
} Vertex;

void printVertex(Vertex *v);

int main (int argc, const char * argv[])
{
Vertex v = {1,0,2};
int memL = (int)&v;
Vertex *vp = &v;

printf("Memory Location: %i\n", memL);
printf("Memory Pointed to by Pointer: %i\n", (int)vp);

Vertex *vp2 = (Vertex *)memL;
printf("Memory Pointed to by Pointer from memory location: %i\n", (int)vp2);

printVertex(vp); // Executes normally
printVertex(vp2); // EXC_BAD_ACCESS

return 0;
}

void printVertex(Vertex *v)
{
printf("Vertex[%f,%f,%f]\n", v->x, v->y, v->z); // EXC_BAD_ACCESS when vp2 passed in
}

输出:
Memory Location: 1606416816
Memory Pointed to by Pointer: 1606416816
Memory Pointed to by Pointer from memory location: 1606416816
Vertex[1.000000,0.000000,2.000000]
EXC_BAD_ACCESS Error

最佳答案

int memL = (int)&v;

可能会截断 v 的地址.你可以试试:
intptr_t memL = (intptr_t)&v;

看看是不是这种情况。如果截断是一个问题,这不应该崩溃。

关于c - 为什么我在通过 int 转换后得到 EXC_BAD_ACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9576558/

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