/ Vijos / 讨论 / 采药 /

事实证明memset,sizeof不可信,除非你是高手但为了保险还是麻烦一点好

memset(f,0,sizeof(f));是错的

第二次改为则对了
for (i = 0;i < T;i++)
f[0][i] = f[1][i] = 0;

12 条评论

  • @ 2016-12-19 13:55:03

    开在全局变量表示同情。。。

  • @ 2014-08-13 11:16:03

    写memset和sizeof时加上头文件就行,string.h和stdio.h

  • @ 2014-01-03 14:59:29

    fp党表示同情

  • @ 2014-01-02 04:15:16

    memset 二维数组是没有问题的, 设为0 或者-1 是没有问题的 如果是 1 或 INT_MAX INT_MIN 会有问题, 因为memset 是byte 8 位为单位设置的。 每个bit 设置为 全0 这样如果是int 就是 0000 全1 如果是int 数组 取出来就是 ffff的时候 是没有问题的, 其他情况如果设置数字过大会有高位byte 地位byte重叠的问题 , 设置为1 会出现 1111的情况.

  • @ 2014-01-01 10:42:38

    这么坑爹么。
    看来for保险。。?
    我一直memset没有问题唉。。

  • @ 2014-01-01 01:51:56

    试了一下,貌似二维数组的memset这么写也没问题。如下。

    ###主要代码:
    int f[n][n]={{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
    memset(f, 0, sizeof(f));

    ###输出:
    Before memset:
    f=
    1 2 3
    3 4 5
    4 5 6

    sizeof(f)=36

    After memset:
    f=
    0 0 0
    0 0 0
    0 0 0

    Press any key to continue . . .

    ###By the way
    C:\Windows\system32>gcc --version
    gcc (GCC) 4.8.1
    Copyright (C) 2013 Free Software Foundation, Inc.

  • @ 2013-12-31 22:42:17

    不是应该 memset(f,sizeof(f),0)这样吗

  • @ 2013-12-29 08:29:36

    自从有一次memset无效之后我一直都用for赋初始值

  • @ 2013-12-28 18:40:17

    是的 二维不可以直接memset

  • @ 2013-12-28 17:55:24

    不过……貌似我用memset时也遇到了些奇奇怪怪的问题……不知道怎么回事……不过几次超时太悲催了……

  • @ 2013-12-28 16:40:17

    用了N年都没出过问题啊~ 话说代码没问题?

  • @ 2013-12-26 21:17:44

    memset(f,0,sizeof(f));之后f里面是啥呢

    是不是要memset(f,0,sizeof(f)*sizeof(f[0]));之类的

  • 1

信息

ID
1104
难度
4
分类
动态规划 | 背包 点击显示
标签
递交数
16820
已通过
6526
通过率
39%
被复制
38
上传者