-
25-08-2012, 04:14 PM #1Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lỗi bài tập Vector - Khi chạy trên CodeBlock và VS C++
Chào mọi người
Mình có làm 1 bài toán Vector đơn giản, nhập , gán
Mình thấy cũng đúng rồi, nhưng chạy trên Visual C++ 2005 thì cứ lỗi đơ file chạy . Thử đem qua CodeBlock thì thấy chạy ổn ko sao cả.
Nhờ mọi người giúp mình với được ko. Xin cảm ơn
Mã nguồn PHP:#include"stdafx.h" #include<iostream> #include<math.h> using namespace std; class Vector { private: int n; float *v; public: Vector() {n=0;} Vector(int size) { n=size; v=new float[n]; } ~Vector() { delete v; } void getdata(); void display(); Vector & operator=(const Vector &x); friend Vector operator*(const Vector &x, float k); }; void Vector::getdata() { if(n==0) { cout<<"
Nhap n = "; cin>>n; } else { for(int i=0;i<n;i++) { cout<<"Nhap toa do thu "<<i+1<<" : "; cin>>v[i]; } } } void Vector::display() { cout<<"( "<<v[0]; for(int i=1;i<n;i++) { cout<<","; cout<<v[i]; } cout<<" )
"; } Vector & Vector::operator=(const Vector &x) { if(n!=x.n) { delete v; n=x.n; v=new float[n]; } for(int i=0;i<n;i++) v[i]=x.v[i]; return *this; } int main() { float k=3; Vector a(5); a.getdata(); a.display(); Vector b; b=a; b.display(); }
View more random threads:
- Cần giúp đỡ về tập tin
- quá tải các toán tử trong lập trình C++. Mọi người giải thích giúp?
- Lập trình c#
- Bài tập lập trình hướng đối tượng cần giúp đỡ
- code C++
- thừa kế hàm tạo, hàm hủy và các toán tử gán
- [ Solved ]Như thế này có gọi là use hàm ảo + đa hình không?
- Bài tập sắp xếp bị ra dữ liệu rác mà ko tìm ra lỗi^^
- mọi người giải thích hộ mình cái if(xau[i]==32 || i=0) vì nếu mình thay 32 thanh so khac thì kết qua sai
- Tính định thức của 1 ma trận
-
25-08-2012, 06:47 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
^
1) Ở hàm khởi tạo mặc định chưa gán con trỏ v = 0, nên nó sẽ trỏ vào 1 vùng không xác định. Giải phóng con trỏ v lúc này sẽ gây lỗi.
2) Để giải phóng vùng nhớ do v trỏ đến, phải dùng delete[] v; chứ không phải delete v;
3) Hàm getdata() có vấn đề. Do chỉ nhập n mà không cấp phát vùng nhớ cho v nên các thao tác sau đó sẽ bị lỗi.
4) Hàm display() chưa xử lý trường hợp vector rỗng.
5) Chưa có Hàm tạo sao chép (copy constructor).
Tạm thời tôi sửa code lại như sau, do khá đơn giản và dễ nhìn nên tôi không ghi comment:
Mã:#include"stdafx.h"#include<iostream>#include<math.h>using namespace std; class Vector{private: int n; float *v; void __clear(); Vector& __make_copy(const Vector&);public: Vector() : n(0), v(0) {} Vector(const Vector& other) { __make_copy(other); } Vector(int size) : n(size) { v = new float[size]; } ~Vector() { __clear(); } void getdata(); void display(); Vector &operator=(const Vector &x) { return __make_copy(x); } friend Vector operator*(const Vector &x, float k); }; void Vector::getdata(){ if (n == 0 || v == 0) { cout<< endl << "Nhap n = "; cin >> n; if (v) delete[] v; v = new float[n]; } for(int i = 0; i < n; ++i) { cout << "Nhap toa do thu " << i + 1 << " : "; cin >> v[i]; cin.ignore(); }} void Vector::display(){ if (n == 0 || v == 0) cout << "Vector rong!!!"; else { cout << "( " << v[0]; for(int i = 0; i < n; ++i) cout << ',' << v[i]; cout << " )" << endl; }}void Vector::__clear(){ n = 0; if (v) delete[] v;}Vector& Vector::__make_copy(const Vector& other){ __clear(); if (other.n != 0 && other.v != 0) { n = other.n; v = new float[n]; for (int i = 0; i < n; ++i) v[i] = other.v[i]; } return *this;} int main(){ float k=3; Vector a(5); a.getdata(); a.display(); Vector b; b = a; b.display(); cin.get(); return 0;}
-
25-08-2012, 07:32 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chân thành cảm ơn ban, bạn nhiệt tình quá
Vệ sinh cá nhân là một phần quan yếu của sức khỏe nam giới. Dùng dung dịch vệ sinh mỗi ngày mang lại nhiều ích, giúp loại bỏ vi khuẩn và vi sinh vật gây hại, giúp khu vực cơ quan sinh dục luôn sạch...
Gel vệ sinh cu, bạn trai có nên...