以下代码在VS上可以正常运行,但是有C6386警告,写入到“p”时缓冲区溢出 : 可写大小为“n * n * sizeof(int)”个字节,但可能写入了“16”个字节。将p[i * n + i] = 1改为*(p + i * n + i) = 1便可消除警告!

#include #include int *creat_eye_matrix(int n){int* p = (int*)malloc(n * n * sizeof(int));if (p == NULL) return NULL;memset(p, 0x00, n * n * sizeof(int));for (int i = 0; i < n; i++){p[i * n + i] = 1;//警告C6386写入到“p”时缓冲区溢出 : 可写大小为“n * n * sizeof(int)”个字节,但可能写入了“16”个字节//*(p + i * n + i) = 1; //可消除C6386警告}return p;}int main(void){int* p = creat_eye_matrix(2);return 0;}