科科都不挂 发表于 2020-7-29 21:21:02

震惊!二维数组归零后,有些值却不为零

Dev-C++,能帮我看一下吗,为什么二维数组赋值为 0 后,打印出来的值存在越界的随机数字,而且总是那几个固定的位置出现问题,谢谢啦!

我利用循环,将c数组的每一项强制赋值 0 后,才解决问题。但是很好奇为什么会出现这种情况。

永恒的蓝色梦想 发表于 2020-7-29 21:21:03

变长数组还是不要这样清零了吧……
代码第一行加上#include<string.h>
数组声明后面加上memset(a, 0, i * m * sizeof(int));
memset(b, 0, m * j * sizeof(int));
memset(c, 0, i * j * sizeof(int));
没用过变长数组,不过貌似可能会出问题,还是乖乖 malloc + memset 吧。

巴巴鲁 发表于 2020-7-29 21:52:33

你这是变长数组,不能这样初始化
用循环赋初始值或还有一个memset,memset函数原型:void * memset(void *ptr, int value, size_t num)
感兴趣可以搜一下

风过无痕1989 发表于 2020-7-29 22:34:49

本帖最后由 风过无痕1989 于 2020-7-29 22:36 编辑

#include<stdio.h>

int main()

{
        int i,j,m;
    int a = {0};
    int b = {0};
    int c = {0};

    for (i = 0;i < 4;i++)
    {
      for (j = 0;j < 5;j++)
      {
            printf("%d",a);
            printf(", ");
      }
            printf("\n");
    }
            printf("\n");
                             
    for (i = 0;i < 5;i++)
    {
      for (j = 0;j < 8;j++)
      {
            printf("%d",b);
            printf(", ");
      }
            printf("\n");
    }
            printf("\n");
            
    for (i = 0;i < 4;i++)
    {
      for (j = 0;j < 9;j++)
      {
            printf("%d",c);
            printf(", ");
      }
            printf("\n");
    }

}

******************************************************************************

用 DEV_C++ 清零,没有问题

https://xxx.ilovefishc.com/album/202007/29/223302dbwbnuk1rznb2inr.jpg

风过无痕1989 发表于 2020-7-30 00:17:09

永恒的蓝色梦想 发表于 2020-7-29 21:21
变长数组还是不要这样清零了吧……
代码第一行加上
数组声明后面加上


谢谢! 又长知识了,第一次听到“变长数组”这个名词,去百度了一番。

看来我选择的头像没有错,只有努力攀登,才能到达顶峰
页: [1]
查看完整版本: 震惊!二维数组归零后,有些值却不为零