我正在尝试做一些定点向量数学运算,似乎无论何时打印任何内容,似乎都不重要。我的向量的值改变了。该代码使用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/

10-11 21:35