c - c 中意外的数组分配

标签 c dynamic-memory-allocation

我写了这段代码:

        Resident_x * infos_shorted;
        Residents=6;
        infos_shorted=(Resident_x *)malloc(Residents*(sizeof(Resident_x)));
        i=0;
        while ((infos_shorted+i)!=NULL){
              printf ("%d\n", i);
              i++;
           }

尽管有人会期望我分配了 6 个内存位置,但当我运行它时,它会一直打印 i ,直到我手动终止它。

这就是我为找到主要问题的答案所做的事情:

我写的是:

    Resident_x * infos_shorted;
    Residents=6;
    infos_shorted[i].height[8]=7;
    infos_shorted=(Resident_x *)malloc(Residents*(sizeof(Resident_x)));
    for (i=0; i<=Residents+4; i++){
          printf ("%d %d\n", infos_shorted[i].height, i);
    }

我正确打印了 infos_shorted[i].height[8] 。怎么样;

最佳答案

while ((infos_shorted+i)!=NULL){

一旦i > Residents,你就会有未定义的行为。尽管如此,infos_shorted + i 很可能会计算出 infos_shorted 值后面的 i*sizeof(Resident_x) 个字节的地址。没有理由期望这样的地址是空指针(直到它换行,但这是更多未定义的行为)。

关于c - c 中意外的数组分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155284/

相关文章:

c - 有什么方法可以打印 n 行 n 列,其中 (1,1) 是 1 ... (1,n) 是 n 那么 (2,1) 是 2 ... (2, n-1) 是 n (2,n) 为 1 且继续;

python - 使用 free() 时出现无效指针错误

c++ - 链表中修改的数据不会反射(reflect)在内存中

c - C 中的内存分配和指针

c - 在 C 中设置线程优先级

C:删除句子中的空格;抛出异常:写访问冲突

fortran - Fortran 中的未知大小矩阵

java - java中数组的内存是分配在栈上还是堆上?

c++ - 动态分配 stdlib 堆栈?

c - 使用 putenv 和 getpid 在 C 中使用 CreateProcess 时出现错误