|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这段代码是先生成N*M矩阵然后打印生成的矩阵,但是为什么打印的结果不正确的问题?希望有明白的鱼友可以解答一下!
- #include<iostream>
- using namespace std;
- class tes
- {
- public:
- int* gen(int N, int M)//生成N*M的矩阵
- {
- int matrix[N*M] = {2};
- for(int i = 0; i < N; i++)
- {
- for(int j = 0; j < M; j++)
- {
- matrix[i*M+j] = i*2+j;
- }
- }
- return matrix;
- }
- void show(int*l)//打印显示生成的N*M矩阵
- {
- for(int i = 0; i < 2; i++)
- {
- for(int j = 0; j < 3; j++)
- {
- cout << *l++ << " ";
- }
- cout << "\n" << endl;
- }
- }
- };
- int main(void)
- {
- tes t;
- int* p = t.gen(2, 3);
- t.show(p);
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2019-12-10 10:55 编辑
你的问题出在,matrix 只是函数 int* gen(int N, int M) 的一个局部变量,其生存期只是在方法函数 gen() 的运行期间,一旦方法调用结束,局部变量 matrix 所占用的内存会被立即释放,供其它变量使用。就是说,在 gen() 以外,matrix 将不复存在。
- #include<iostream>
- using namespace std;
- class tes
- {
- public:
- int matrix[2][3] = {2} ;
- void gen(void)
- {
- for(int i = 0; i < 2; i++)
- {
- for(int j = 0; j < 3 ; j++)
- {
- matrix[i][j] = i * 2 + j ;
- }
- }
- }
- void show(void)
- {
- for(int i = 0; i < 2; i++)
- {
- for(int j = 0; j < 3; j++)
- {
- cout << matrix[i][j] << " ";
- }
- cout << "\n" << endl ;
- }
- }
- };
- main(void)
- {
- tes t ;
- t.gen() ;
- t.show() ;
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o x x.cpp
- C:\Bin>x
- 0 1 2
- 2 3 4
- C:\Bin>
复制代码
|
|