代码之家  ›  专栏  ›  技术社区  ›  Python_user

C++中的MeSET函数不能正常工作[复制]

  •  2
  • Python_user  · 技术社区  · 7 年前

    i s码( i>0 )使用 memset . 但是,当我打印出数组的值时,它会打印一些垃圾。以下是我的代码片段:

    int main() {
        int T=1, R=3, C=3;
        int **grid = new int*[R], *temp = new int[R*C];
        for (int i=0; i<R; i++)
            grid[i] = (temp+(C*i));
        for (int t=1; t<=T; t++){
            memset(temp,1,sizeof(int)*R*C);
            cout << t << ":\n";
            for (int i=0; i<R; i++){
                for (int j=0; j<C; j++)
                    cout << grid[i][j] << " ";
                cout << endl;
            }
        }
        delete [] grid;
        delete [] temp;
        return 0;
    }
    

    输出如下:

    1:
    16843009 16843009 16843009
    16843009 16843009 16843009
    16843009 16843009 16843009
    

    但是,如果我尝试用0初始化它,它会正常工作并显示:

    1:
    0 0 0
    0 0 0
    0 0 0
    

    我对学习C++比较陌生。代码出了什么问题?



    1 回复  |  直到 7 年前
        1
  •  2
  •   Szabolcs Dombi    7 年前

    memset 写入数组中的每个字节,而不是每个int。

    价值 16843009 十六进制是 0x01010101 1 .

    清零 将对字节进行运算,无法使其对整数进行运算。