C++作业遇到的心塞问题,求助

吱吱吱吱涵 2015-04-26 03:37:37
小弟的电脑是mac,用xcode写c++作业,遇到了一个没能解决的问题,在此抛出,向大家请教。

事情是这样的,



这是小弟在不修改代码的情况下做的两次测试,输入的数据相同,然而矩阵输出的结果却不同。

在多次测试中发现,矩阵a(先输入的矩阵)从第5个元素开始被矩阵b(后输入的矩阵)的元素取代。

然而蹊跷的是小弟把代码在win8.1 codebloks IDE 中测试三次并没有上述错误。

下面是小弟写的代码的一部分,贴出来



matrix::matrix(int _row,int _column ,int *par) //含有参数的构造函数
{
setrow(_row);
setcolumn(_column);
p = new int(_row * _column);
for (int i = 0; i < row * column; i++)
{
p[i] = par[i];
}
}


matrix::matrix(matrix & m) //拷贝构造函数
{
row = m.row;
column = m.column;
p = new int (m.row * m.column);
for (int i = 0; i < row * column; i++)
{
p[i] = m.p[i];
}
}


ostream & operator<<( ostream & left, const matrix & right)
{
for (int i = 0; i < right.row; i++)
{
for (int j = 0; j < right.column; j++)
{
left << right.p[i * right. column + j] <<" ";
}
cout << endl;
}
return left;
}


istream & operator>>( istream & left, matrix & right)
{
for (int i = 0; i < right.row; i++)
{
for (int j = 0; j < right.column; j++)
{
left >> right.p[i * right. column + j];
}
cout << endl;
}
return left;
}






int main()
{
int arow = 0 ,brow = 0 ,acolumn = 0 ,bcolumn = 0;
int choice;

cout << "请输入矩阵a的行数:" <<endl;
cin >> arow;
cout << "请输入矩阵a的列数:" <<endl;
cin >> acolumn;
int *pa = new int[arow * acolumn];
cout << "请输入a的元素:" <<endl;
for (int i = 0; i < arow * acolumn ; i++)
{
cin >> pa[i];
}

cout << "请输入矩阵b的行数:" <<endl;
cin >> brow;
cout << "请输入矩阵b的列数:" <<endl;
cin >> bcolumn;
int *pb = new int[brow * bcolumn];
cout << "请输入b的元素:" <<endl;
for (int j = 0; j < brow * bcolumn ; j++)
{
cin >> pb[j];
}
//创建矩阵a、b

matrix a(arow ,acolumn ,pa);
matrix b(brow ,bcolumn ,pb);
cout << "******选择对矩阵的操作******" <<endl;
cout << "1.显示被创建的矩阵" <<endl;
cout << "2.判断矩阵a、b是否相等" <<endl;
cout << "3.矩阵加法" <<endl;
cout << "4.矩阵减法" <<endl;
cout << "5.矩阵乘法" <<endl;
cout << "6.退出" <<endl;
cin >> choice;
while (choice!=6)
{
switch (choice)
{
case 1:
cout << "矩阵a为:\n" << a << endl;
cout << "矩阵b为:\n" << b << endl;
break;
………
………
...全文
181 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吱吱吱吱涵 2015-04-27
  • 打赏
  • 举报
回复
引用 1 楼 brookmill 的回复:
你的两个构造函数里面的new都写错了,应该是中括号,不是小括号。 int *p = new(10); // 分配一个int,值是10 int *p = new[10]; // 分配10个int xcode里面两次分配的内存,a.p 和 b.p, 应该是距离不够远,所以b.p覆盖了a.p 而codeblocks分配的b.p和a.p,可能距离很远,所以互相没有覆盖。
感谢老兄!十分感谢!困扰我很久了! 我又检查了一下代码,发现不少地方new括号都写错了,改过来后运行无误了。 再次谢谢 !
赵4老师 2015-04-27
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
brookmill 2015-04-26
  • 打赏
  • 举报
回复
如果楼主想问为什么有时候覆盖有时候不覆盖,或者为什么从第5个开始覆盖,那就不好说了。内存分配只是保证给你的内存不少于你申请的,会不会多给、多给多少,那就比较任性了。 有兴趣的话可以在不同的编译器里面试试类似这样的代码: p1 = new int(1); cout << (unsigned long) p1 << endl; p2 = new int[10]; cout << (unsigned long) p2 << endl; ......
brookmill 2015-04-26
  • 打赏
  • 举报
回复
你的两个构造函数里面的new都写错了,应该是中括号,不是小括号。 int *p = new(10); // 分配一个int,值是10 int *p = new[10]; // 分配10个int xcode里面两次分配的内存,a.p 和 b.p, 应该是距离不够远,所以b.p覆盖了a.p 而codeblocks分配的b.p和a.p,可能距离很远,所以互相没有覆盖。
《深入浅出 C++》视频教程详细、系统地介绍了 C++ 开发中方方面面的技术细节,整个课程涵盖知识点非常多,知识模块囊括 名字空间、类与对象、继承与多态、各类友元、异常机制、函数模板、类模板、STL容器操作等等,学完之后将拥有C++开发的非常坚实的功底。 注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。 本套视频教程不仅会讲清楚概念和相应知识点,而且会抽丝剥茧,讲清楚来龙去脉,站在编程语言设计者的角度讲清楚为什么会出现这样的语法,站得高才能看得远,而不仅仅纠缠于细碎的语法。既有登高望远的视角,又有俯身前行的实践,有别于市面上大多数流于表面的教程。下面是讲解迭代器的一节视频的截图: 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程包含全套11套作业题,覆盖所有视频知识点,循序渐进,各个击破。下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:常见问题:问:零基础可以学习吗?答:这门课程并非针对完全零基础的学员,学习这门课程需要对C语言有了一定了解的。问:遇到问题可以答疑吗?答:可以的,购买课程后可以联系到我,安排进入专门的QQ答疑群。不仅可以向老师提问,也可以跟其他同学讨论,结交兴趣相投的朋友。问:学完能做什么?答:C++是众多开发岗位的必备技能,也是进入面向对象编程领域的一门利器,可以胜任很多岗位的职业要求。尤其是对游戏开发、游戏引擎、算法、界面开发、系统开发等等,C++都是热门技术。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧