30/09/2018, 16:15
Cách tăng kích thước của mảng mà không bị lỗi?
Chào mọi người
Hiện tại em có 1 điều đang thắc mắc là mãi chưa tìm thấy câu trả lời
em có struct như sau:
struct Chuoi
{
char So[10000]
};
Em không tại sao khi em tăng char So[10000] >>> char So[1000000000000] thì nó lại bị báo lỗi và nếu báo lỗi như vậy thì có cách nào để em có thể chuyển từ char So[10000]>>> char So[1000000000000]
Mong mọi người giúp em
Xin chân thành cảm ơn .
Bài liên quan
Câu hỏi của em có thể bị trùng với câu hỏi này. Trong đó @Rok_Hoang đã hỏi
Đây là câu trả lời, em có thể hiểu tương tự cho trường hợp của em
Riêng về câu hỏi:
Em không thể và không nên làm vậy. Không thể vì bộ nhớ không đủ, không nên vì em có cách khác để làm. Đó là em cắt cái mảng của em ra thành mảng nhỏ hơn, rồi nếu dữ liệu quá dài, em ghi bớt xuống file data.
mình có thể dùng malloc hay calloc để khởi tạo kích thước lớn hơn được không anh? (xử lí trường hợp của @Thai_Hoc_Nguyen)
Được, nhưng cũng cùng chung số phận thôi. Cấp phát vùng nhớ lớn quá. Bộ nhớ không đủ thì cũng tèo thôi em.
Trong struct mình có thể dùng malloc để khai báo kích thướng cho một mảng được không anh? (tại em thấy nó chuyền cố định cho 1 con trỏ).
p/s: struct của em dùng để lưu trữ số cực lớn.
em nói “trong struct” là sao? Tức là đối với struct ta có thể dùng malloc hay không đấy hả? Được em.
Em viết như thế này
Giống hệt như với kiểu int thôi
ví dụ em có
nếu như thế thì em có thể nới rộng mảnh
num.so
được không?em đang gặp rắc rối ở chỗ
num.so
không lưu hết các số được, khai báo theo kiểuchar so[1000000]
thì sẽ bị lỗi :(( hỏi mấy hôm nay không nghĩ ra được nên hỏi toẹt luôn.p\s: đang học tới struct cơ
Nếu em khai báo nhiều như vậy thì anh nghĩ kể cả malloc cũng không giúp được em. Cái này chỉ khác nhau ở chỗ cách khai báo thôi. Còn số lượng bytes là như nhau. Hệ điều hành không đồng ý cấp với dung lượng cỡ đó thì cũng chết.
Lý do tại sao em lại muốn khai báo mảng lớn như vậy?
Để lưu số thôi anh ơi, em đang có bài toán yêu cầu tính số fibonaci thứ 10^9.
Em không thể tính bằng cấp một cái mảng thật là to được. Cách hiện giờ em đang làm là như thế nào?
hiện giờ em làm theo kiểu khai báo struct như trên. Sau đó thực hiện phép cộng như của học sinh tiểu học (từ phải qua trái).Lưu nó vào 1 chuỗi và lại tiếp tục. (như trong code của em thì khai báo kích thước char a[32000] thì em tính được số fibo thứ 150000 thôi)
Em đang tính không dùng struct nhưng không biết thầy cho không vì đang làm đồ án liên quan đến struct
Nếu mà dùng C++, theo mình nên dùng std::vector thay vì dùng
char s[32000]
sẽ rất lãng phí bộ nhớ khi lưu số có giá trị nhỏThay vì lưu vào chuỗi, em lưu vào file đi. File có thể ghi với độ dài lớn hơn nhiều. Sau này đọc lên tính tiếp. Chia để trị.
Hiện giờ anh không có thuật toán nào để giúp em, nhưng nếu về việc xử lý vùng nhớ bị thiếu thì anh nghĩ em dùng file hay hơn. Không thể lưu tất cả trong RAM được.
vậy có thể sử dụng cách ghi vào file. Còn cách không dùng struct mà khai báo 3 chuỗi để làm việc cũng được đúng không anh?
tks anh, em sẽ xem thử cách này, còn cách vector thì chưa học đến nên chắc chưa dùng được chờ dịp khác vậy
Miễn là 3 chuỗi đó không quá dài, hệ điều hành vẫn có thể cấp ram cho nó là được
Thật Sự là em không biết gì về file
Em có thể hỏi @Rok_Hoang để nhờ bạn ấy giúp.
Sáng nay đi học ra bắt gặp một lão đang code hỏi được một chút anh Đạt chắc biết về cái này nên hướng dẫn cho em kĩ phần này xíu
ông này chỉ em cách khai báo ngay trong struct và thêm một số operator, em code lại như sau:
cho em hỏi cái
~bigNum
là thế nào (hình như là destructure) việc giải phóng thực hiện khi nào?cái
operator =
dùng để gán nhưng không biết viết vậy đúng chưa nữa? (anh kia chỉ là do nó trỏ về cùng một địa chỉ nên phải định nghĩa lạioperator =
cho nó)em thay struct cũ bằng struct này nhưng vẫn không được(nó báo lỗi trên hàm
strcat()
), có vấn đề gì lưu ý ở đây mà em không biết không? (thao tác của em vẫn chỉ thực hiện trên chuỗi thôi):(( toàn kiến thức năm 2 mà thầy cho đồ án ảo quá đi
Là destructure, giải phóng được thự hiện khi object đó ra khỏi scope.
Gán như vậy là đúng rồi.
Em cho anh xem lỗi chứ sao anh biết được.
Tuy nhiên sao em không dùng class mà lại dùng struct? Class và struct trong C++ giống nhau. Chỉ khác ở một điểm là class mặc định mọi thành viên và phương thức của nó là private. Struct thì ngược lại, tất cả là public.
hình như toán tử bằng có vấn đề anh ơi …em viết hàm để tính phép cộng là
addBigNum
,em kiểm tra giá trị của biến trong hàm trước khireturn
là chính xác nhưng không gán được cho biến .Bên dưới là hàm để tính phép cộng.tăng chi để rồi lỗi ,tai sao ko khởi tạo mang [100000000000000] cho roi