我正在尝试做一些定点向量数学运算,似乎无论何时打印任何内容,似乎都不重要。我的向量的值改变了。该代码使用Zilog的ZDSII开发人员工作室进行编译。
我有一个这样定义的结构
typedef struct {
long x;
long y;
} vector;
结构中的值在函数中初始化
void initVector( vector * vec, int x, int y ) {
vec -> x = (long) x << 14;
vec -> y = (long) y << 14;
}
在我的主要职能中,我有
int main() {
vector * vector1;
initVector( vector1, 1, 2 );
printf( "foo" ); // this prints alright
printf( "%d , %d", vector1 -> x >> 14, vector1 -> y >> 14 ); //garbage
...
...
}
哪个打印垃圾。值将根据我实际在其中打印值的printf之前的printf语句数而变化。
最佳答案
您使用未初始化的vector1
,
vector * vector1;
initVector( vector1, 1, 2 );
因此
initVector
会调用未定义的行为。做了
vector vector1;
initVector(&vector1, 1, 2);
要么
vector * vector1 = malloc(sizeof *vector1);
关于c - Printf更改内存值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17064215/