01/10/2018, 15:59

Chương trình không chạy được với số lớn

Cho mình hỏi tại sao chương trình của mình nhập n khá lớn thì không được nữa (mình muốn tính tổng các số trong 1 mảng) (thực ra n = 20 là segmentation fault rồi)

#include <iostream>
using namespace std;

int n;
int *arr=new int[n];

void enter(int *a,int &n)
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
}

int sum(int *a,int n)
{
	int s=0;
	for(int i=0;i<n;i++) s+=a[i];
	return s;
}

void print(int *a,int n)
{
	cout<<sum(a,n)<<endl;
}

int main()
{
	enter(arr,n);
	print(arr,n);
}

(trường mình bắt thi phải dùng con trỏ cho mảng chứ mình không muốn đâu!!!)

rogp10 viết 18:07 ngày 01/10/2018

int n; int *arr=new int[n];

Vây bạn ghi n=20 là ở chỗ nào bạn?

evai55 viết 18:06 ngày 01/10/2018

Lúc mình nhập vào từ console ấy

rogp10 viết 18:08 ngày 01/10/2018

Thực ra là bạn đã new int[n] trước khi cho nhập n nên nó không nhận size là bt.

evai55 viết 18:03 ngày 01/10/2018

Mình đã sửa lại, nhưng lần này nó ra 1 giá trị rác (mình new int lần 2 trong hàm enter):

 #include <iostream>
using namespace std;

int n;
int *arr=new int[n];

void enter(int *a,int &n)
{
	cin>>n;
    a=new int[n];
	for(int i=0;i<n;i++) cin>>a[i];
}

int sum(int *a,int n)
{
	int s=0;
	for(int i=0;i<n;i++) s+=a[i];
	return s;
}

void print(int *a,int n)
{
	cout<<sum(a,n)<<endl;
}

int main()
{
	enter(arr,n);
	print(arr,n);
}

Mình cũng đã thử thay int *arr=new int[n] thành int *arr nhưng cũng không được. Mình muốn dùng arr như 1 biến toàn cục.

Phan Việt viết 18:08 ngày 01/10/2018

vì size của mảng chưa xác định được cho tới khi nhập n nên ta chỉ có thể khởi tạo dynamic memory cho nó bằng hàm malloc . Sau khi ko dùng nữa thì pác phải giải phóng bộ nhớ của nó bằng hàm free hay delete gì đó mình quên rồi.

còn syntax new int[2] là khởi tạo static memory (tức là phải biết trước kích cỡ), ko thể truyền n vào được.

Tao Không Ngu. viết 18:14 ngày 01/10/2018

Hi evai55.
1, Bạn học kỹ về con trỏ. Code C/C++ không dùng con trỏ thì như thiếu 1 tay vậy.
2. Bạn cũng có thể không học nếu không có ý định code C/C++ và cũng không cần thiêt làm bài này.
3. Tại sao bạn lại muốn dùng như biến toàn cục. Bạn có thể tìm trên mạng các hạn chế của biến toan cục.
4. Bạn cũng có thể không tìm hiểu vì thực tế bạn cũng không học lập trình làm gì.

P/S Hãy làm cái gì bạn muốn còn không thì học những gì bạn phải học.

Bài liên quan
0