2012-08-11 75 views
-2

我遇到了一个很奇怪的问题。 我定义了一个结构并将其作为一个const指针传递给一个函数。代码就像下面那样。当使用结构指针作为函数参数时出现错误值

typedef struct a{ 
    char str1[256]; 
    ... 
    int x; 
}a_t; 

int f(..., const a_t *a){...} 

a_t a; 
... 
a.x = 1; 
f(..., &a); 
... 

问题是一旦它进入f(),我会打印出变量a-> x,它总是0!?? 但是,如果我将结构成员x移动到结构的顶部(在其他成员之前),它将是1,这是正确的。

是否有任何使用结构指针作为参数的技巧或陷阱?

[EDIT1该printf的被称为函数f()一号线

+6

显示你放什么'F'功能,你很可能溢出'str1'成员。 – ouah 2012-08-11 09:29:31

+4

请尝试创建[SSCCE](http://sscce.org/),关于指向结构的指针没有什么特别之处。 – Mat 2012-08-11 09:29:51

回答

2

无法评论,所以我会建议调试选项。你可以在函数和之前添加结构元素x地址的打印吗?如果某人正在改变它,否则我们不会看到相同的价值。功能

typedef struct a{ 
    char str1[256]; 
    ... 
    int x; 
}a_t; 

int f(..., const a_t *a) 
{ 
    printf("X value %d, address %p", a->x, &(a->x)); 
    ... 
} 


a_t a; 
... 
a.x = 1; 
printf("X value %d, address %p", a.x, &(a.x)); 
f(..., &a); 
... 

还详细视图可以帮助

+0

关于打印指针地址的好建议。稍后将发布结果。 – deepsky 2012-08-11 10:00:30