2011-04-21 33 views
7

tôi đang làm việc trên một ứng dụng đã có ba kích cỡ có thể cho dữ liệu nhập:Phân bổ Một Lớn (5000) Mảng

  • nhỏ: 1000 yếu tố
  • medium = 5000 yếu tố
  • lớn = 500.000 phần tử

Vấn đề là tôi không thể phân bổ mảng lớn. Có vẻ như kích thước lớn hơn 5000 không được chấp nhận.

tôi nhận được một lỗi thời gian chạy khi tôi làm như sau:

long size=1000; 
char ch; 
int arr[size]; 
ch=getch(); 

if(ch==..) 
    size=...; 

Kích thước của 1000 và 5000 dường như làm việc tốt, nhưng làm thế nào tôi có thể thực hiện một loạt các kích thước 500k theo cách này?

+0

Bạn có ý nghĩa gì chính xác bởi "không thể phân bổ"? bạn đang nhận được một lỗi? Thông điệp là gì và bạn lấy nó ở đâu? Lưu ý rằng 500000 phần tử không phải là 500K. Nó có lẽ là 2Meg, vì C 'int' s thường là 4 byte mỗi. –

+0

i có nghĩa là tôi nhận được một lỗi thời gian chạy, bởi 500k tôi có nghĩa là 500 nghìn yếu tố không kích thước –

+1

lỗi thời gian chạy là một ngăn xếp tràn –

Trả lời

8

Ngăn xếp của bạn không thể chứa nhiều dữ liệu. Bạn phải phân bổ các mảng lớn trên heap như sau:

int *array = malloc (sizeof(int)*size); 

Như pmg đã chỉ ra nhớ để giải phóng bộ nhớ của bạn khi bạn đã hoàn tất.

free(array); 
+0

ngôn ngữ trong câu hỏi là c –

+1

hoặc, tương đương C của nó 'int * mảng = malloc (sizeof (int) * kích thước)' – cobbal

+0

yeah cảm ơn cho người đứng đầu lên. Sửa lỗi đó. – Pepe

3

Quá lớn đối với chồng. Thay vào đó, bạn cần phải phân bổ nó trên heap với malloc.

8

Bạn có thể phân bổ một mảng lớn như vậy trên heap:

int *arr; 
arr = malloc (sizeof(int) * 500000); 

Đừng quên kiểm tra phân bổ mà succeded (nếu không muốn nói - malloc trả về NULL).

Và như pmg đã đề cập - vì mảng này không nằm trong ngăn xếp, bạn phải free khi bạn đã hoàn thành công việc với nó.

+0

Và nhớ để' free' con trỏ một khi bạn đang làm việc với nó. – pmg

+0

@pmg - cảm ơn, chỉ cần nghĩ về nó :) – MByD

Các vấn đề liên quan