在使用new生成动态数组,有一个很重要的问题就是防止越界。
一维数组
在使用memset初始化时,需要手动指定数组内存长度,而不能直接使用sizeof(array)
eg:
int* num;
num = new int [n];
我们需要对该数组进行初始化,如果直接使用memset (num, 0, sizeof num)
, 将只会对第一个元素进行初始化
我们应当手动指定初始化长度
memset (num, 0, n * sizeof (int));
二维数组
建议不使用memset,不管你是直接对二维数组初始化,还是for循环,对你每一行所构成的一维数组进行初始化。
当还是坚持该方式初始化,Vs对元素监视时将会出现无法读取内存的问题,对程序导致的后果是导致访问冲突
0x00230F93 处引发的异常: 0xC0000005: 读取位置 0x00000068 时发生访问冲突
所以建议使用for循环初始化,或者使用容器