结构指针的C数组 - 分配新值

时间:2015-07-25 21:10:20

标签: c

我错过了什么?我是C的初学者,但我得到的结果对我来说意外。我简化了案例以获得错误。

double years = (double) date.get(Calendar.YEAR) - (double) startDate.get(Calendar.YEAR);

打印的结果是一百九十九。我期望的是:1,2,3 ......

2 个答案:

答案 0 :(得分:5)

循环中的这个声明

struct str str1;

生成类型为struct str的变量,该变量仅在创建它的循环的迭代期间有效。迭代结束后,str1将变为无效。如果您决定通过该迭代范围之外的指针访问它,则会得到未定义的行为

您可以使用malloc制作“持久”struct以供稍后在该计划中使用:

strArray[i]= malloc(sizeof(struct str));
strArray[i]->a = i;

由于struct是动态分配的,因此您需要在使用strArray元素后将其释放:

for(int i = 0; i < 100; i++) {
    free(strArray[i]);
}

答案 1 :(得分:0)

整个strArray指向最后包含99的str1,所以整个数组位置指向99,str1在第一次循环迭代的最后包含。