以下代码在VS上可以正常运行,但是有C6386警告,写入到“p”时缓冲区溢出 : 可写大小为“n * n * sizeof(int)”个字节,但可能写入了“16”个字节。将p[i * n + i] = 1改为*(p + i * n + i) = 1便可消除警告!
#include <stdlib.h>
#include <memory.h>
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;
}