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!!!)

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

2 Likes

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

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.

2 Likes

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.

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.

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.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?