c语言结构体指针初始化

    技术2022-05-20  37

        这bug困扰我两天了!非常诡异的bug,症状是传参的时候如果传递的是结构体指针,第一次读取结构体会出来正确的值,第二次就是垃圾数据了。bug的根源在于,应该一开始就用malloc初始化结构体指针作为返回值,而不是初始化一个结构体然后取地址。这么取出来的地址类型不对,会造成诡异的bug,比方说我遇上的这个,从这个症状咱能想到什么?

        看代码!以后这错误不能犯了。结构体数组一生下来就必须malloc

     

    /

    // datatype.h

    /

    #ifndef DATATYPE_H_

    #define DATATYPE_H_

     

    typedef struct Ruler {

    int len;

    double start;

    double step;

    double stop;

    } *Ruler_ptr, Ruler;

     

    Ruler_ptr initRuler();

     

    #endif /* DATATYPE_H_ */

     

     

    /

    // datatype.c

    /

     

     

    #include <stdlib.h>

    #include <stdio.h>

    #include "datatype.h"

    Ruler_ptr initRuler() {

    Ruler_ptr rp;

    // Ruler ruler;    // 把malloc换成注释里边这两句,就会出现上述诡异错误

    // rp = &ruler;

    rp = (Ruler_ptr)malloc(sizeof(Ruler));

    rp->len = 10;

    rp->start = 1.5;

    rp->stop = 5.5;

    rp->step = 1.2;

    return rp;

    }

     

     

    /

    // main.c

    /

     

     

    #include <stdlib.h>

    #include <stdio.h>

    #include "datatype.h"

    int main () {

    Ruler_ptr rp;

    rp = initRuler();

    printf("%d/n", rp->len);  // 同一个值print三遍,第一遍正确,后边就乱套了

    printf("%d/n", rp->len);

    printf("%d/n", rp->len);

    return 0;

    }

     

     


    最新回复(0)