C ++中的记忆集功能无法正常工作

时间:2018-10-27 07:30:19

标签: c++ memset

我尝试使用i将动态分配的(2D?)数组初始化为所有i>0memset)。但是然后,当我打印出数组的值时,它正在打印一些垃圾。以下是我的代码段:

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 个答案:

答案 0 :(得分:2)

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

以十六进制表示的值168430090x01010101的一个整数,每个整数有4个字节设置为1

memset将对字节进行操作,无法使其对整数进行操作。