这是我的代码:
void foo(int num) {
int *pArr = (int *)malloc(num * sizeof(int));
// allocate array of 'sale' structs for each region
for (int i = 0; pArr != NULL && i < num; i++) {
pArr[i] = 1;
}
}
int main() {
int num = 36;
foo(num);
}
该表达式pArr[i] = 1;
给出 C6386 警告
警告 C6386 写入“pArr”时缓冲区溢出:可写大小为“num*sizeof(int)”字节,但可能写入“8”字节。
这很奇怪,因为for
循环的迭代次数和头部数组的大小都取决于num
所以溢出实际上永远不会发生。
然后有一个详细的解释:
i
可能等于 1
pArr
可能是NULL
(继续此循环)
无效写入pArr
,(超出其可写范围)
但这当然是视觉工作室的错误,pArr
不可能NULL
,因为这是进入循环的条件。
如何清除此警告?
谢谢你们