下のコードでは、印刷頂点を呼び出すときに明らかな理由がないため、EXC_BAD_ACCESS
エラーが発生しています。ポインタはまったく同じ場所を指していますが、vp2を渡すと何とかクラッシュします。intをキャストした後にEXC_BAD_ACCESSを取得するのはなぜですか?
#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
'%p'を使用して、' intptr_t'のポインタ –