Lỗi khi cấp phát bộ nhớ động cho mảng 1 chiều

Mọi người cho em hỏi em muốn cấp phát mảng động cho array_b với độ dài là length_b.Length_b được xác định bằng hàm điều kiện check_nguyento.Mọi thứ chạy bình thường nhưng khi length_b quá dài thì nó có lỗi và đọ dài mảng b cố định là 3.Sau đó thfi các bước sau không được thực thi.Trước đấy em có cấp phát một bộ nhớ động cho array_a ngoài main.Em sợ là nó bị dính dữ liệu

#include <iostream>
#include <math.h>
using namespace std;
int length;
int *p;//bien nhan vi tri cua arr
int *array_a = new int[length];//mang dong co n phan tu

int *nhap_array () //ham nhap array arr
{
	cout << "Moi nhap so phan tu cua ham length =  ";
	cin >> length;
	for (int i = 0;i < length;i++ )
	{
		cout << "a[" << i << "] = " ;
		cin >> array_a[i];
	}
	cout << "Mang nhap vao la: ";// hien mang
	for (int i = 0;i < length;i++ )
	cout << array_a[i] <<",";
	cout << "\n";
	return array_a;
}

bool check_nguyento (int n)//ham kiem tra so nguyen to flag_nguyen_to
{

		int uoc;// bo dem uoc cua n
		for (int i = 0;i < length;i++ ) //check so nguyen to
		{
			if (n<1) return false;
			if  (n < 2) 
			{
				return true;
			}
			else
			{
			    for(int t = 2; t <= sqrt(n); t++)
				{
			        if(n % t == 0)
					{
			            uoc++; // tang so uoc neu tim thay
			        }
			    }
			    if(uoc != 0)//thuc thi neu khong la so nguyen to
				{
					return false;
			    }
			    else return true;	
			}
		}
	
}
int main ()
{
	
	p = nhap_array ();// nhap mang
	cout << "Tach so nguyen to \n";
	int length_b=0;//do dai mang b
	
	for (int i = 0;i < length;i++ ) // tinh do dai mang b hay so so nguyen to trong a
	{
		if (check_nguyento(*(p+i))) 
		length_b++;
	}
	cout << "\nDo dai mang b la: " << length_b << "\n";// hien do dai mang b
	int *array_b = new int [length_b];// cap phat bo nho dong cho array_b dua vao length_b
	
	int ib = 0;//bo dem index cua array b;
	
	for (int i = 0;i < length;i++ )// nhap nguyen to tu array a vao array b
	{
		if (check_nguyento(*(p+i))) 
		{
		array_b[ib] = *(p+i);//nhap con tro vao phan tu thu ib cua array b
		ib++;
		}
	}
	
	cout <<"Mang b chi gom cac so nguyen to la: ";//hien mang b
	for (int ib = 0;ib < length_b;ib++ )
	cout << array_b[ib] <<",";

cout << "\n";
	
	
}

Bộ nhớ động thì cấp phát lúc nào cũng được, nên mới gọi là động.
PHẢI cấp phát sau khi có độ dài length. Chứ mới vô phát thì nó có biết length bằng mấy đâu.

6 Likes

hình như đúng rồi cảm ơn bác.

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