【问题标题】:Allocating array in a for-loop outputting nonsense [closed]在for循环中分配数组输出废话[关闭]
【发布时间】:2020-09-30 16:16:55
【问题描述】:

我正在尝试动态分配一个固定大小的整数数组,但是在填充数组时会出现问题。

#include <stdio.h>
#include <stdlib.h>
#define SIZE_OF_ARRAY   5

int main(void) {

   int * myArr;
   myArr= (int*)malloc(SIZE_OF_ARRAY * sizeof(int));

   if (myArr == NULL) {
    return EXIT_FAILURE;
   }

   for (int i = 0;i<SIZE_OF_ARRAY;i++) {
       *(myArr +1)=i;
       printf("myArr[%d]= %d\n", i, myArr[i]);
   }
   return EXIT_SUCCESS;
}

输出

myArr[0]= 0
myArr[1]= 1
myArr[2]= 0
myArr[3]= 805306368
myArr[4]= -1739194352

为什么只分配到数组的第二个索引?

【问题讨论】:

    标签: arrays c dynamic-memory-allocation


    【解决方案1】:

    您不初始化数组的元素。所有分配都在此处对元素 [1] 完成:

    *(myArr +1)=i;
    

    【讨论】:

      【解决方案2】:

      替换*(myArr +1)=i;
      *(myArr + i) = i;

      【讨论】:

        【解决方案3】:

        *(myArr +1) 是数组的第 1 个元素。你可能打算*(myArr +i)

        【讨论】:

          【解决方案4】:

          今天的咖啡太少了

          *(myArr +i)=i;
          

          myArr[i]=i;
          

          完成任务

          【讨论】:

            【解决方案5】:

            *(myArr + i) = i(或只是myArr[i] = i)?

            使用恒定的 +1 偏移量,当前代码只会更改第二个元素

            第一个元素“偶然”评估为 0,因为它从未分配过值,这可能错误地有助于支持初始断言..

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-05-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-29
              • 2012-12-04
              • 2015-06-14
              • 2019-01-03
              相关资源
              最近更新 更多