new创建大空间时不连续,导致无法使用memset函数的解决方法

时间:2024-03-12 12:04:59

  

 1 #include <iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     //创建一个n*m的连续空间
 8     int **p;
 9     int n,m;
10     cin>>n>>m;
11     p = new int*[n];
12 
13 //原来的方法
14 /*
15     for(int i=0 ;i<n ; i++)
16     {
17      *(p+i) = new int[m];
18     }
19     memset(*p,0,sizeof(int)*n*m);
20 */
21 
22 //新方法,可以使用memset
23 
24  /*   *p = new int[n*m];//先创建连续的全部空间
25     for(int i=0;i<n;i++)
26     {
27         *(p+i) = *p + i*m;//将各个头点与连续空间相应点匹配
28     }
29     memset(*p,0,sizeof(int)*n*m);
30 */
31 
32 //输出
33     for(int i =0;i<n;i++)
34     {
35      for(int j =0 ;j<m ;j++)
36      {
37          cout<<p[i][j]<<\' \';
38      }
39      cout<<endl;
40     }
41     return 0;
42 }

memset 对一个连续空间进行操作,若空间不连续,那么这个函数won‘t work。

我们先测试一下原来的方法

发现输出错误,说明这个空间有时候连续,有时候不连续。

那么我们试试新方法。

 

输出正常,说明整个空间都是连续的。