01/10/2018, 10:43

Lỗi out_of_range at memory location 0x00CFF8F0 trong C++ là gì

khi mình so sánh:
string lo;
getline(cin, lo);

        for (int i = 0; i < lo.size(); i++)
        {
                if (lo.at(i) == lo.at(i - 1))
        	{
        		break;
        	}
        }
        cout << lo << endl;

thi mình gặp lỗi Unhandled exception at 0x7535A832 in test1.exe: Microsoft C++ exception: std::out_of_range at memory location 0x00CFF8F0.

-Nhưng khi mình kết hợp dùng với hàm isgraph thì nó lại không gặp lỗi

for (int i = 0; i < lo.size(); i++)
	{
		if (isgraph(lo.at(i)))
		{

		}
		else
		{
			if (lo.at(i) == lo.at(i - 1))
			{
				cout << lo << endl;
			}
		}
	}

ae nào biết chỉ mình với.

HK boy viết 12:50 ngày 01/10/2018

i = 0 thì lo.at(i - 1) chạy kiểu gì hả bạn? lo là std::string, nó rất “nhạy cảm” với vụ này.
Lần sau bạn nên đọc kĩ lỗi và có search google trước khi hỏi.

Có 1 rổ kết quả cho bạn chọn nếu bạn google vói keyword “std::out_of_range at memory location”

Huy Trần viết 12:56 ngày 01/10/2018

mình lên gg r k thấy ms vào đây hỏi chứ ms học mà có phải học lâu r đâu vs cả mình dùng isgraph thì nó vẫn chạy dc nhưng k dùng isgraph thì nó bị lỗi

HK boy viết 12:52 ngày 01/10/2018

mình lên gg r k thấy ms vào đây hỏi chứ ms học mà có phải học lâu r đâu

Viết câu có chấm phẩy giúp mình nhé. Mình không đủ hơi để đọc 1 lèo câu của bạn đâu
OK, nếu như bạn đã nói là bạn gg rồi, vậy thì trong câu hỏi bạn hãy nói rõ ra là “em đã gg hoài mà không tìm được kết quả”. Tuy nhiên, lỗi của bạn rất cơ bản, bạn có thể sử dụng công cụ debug của IDE để tìm lỗi chứ không nên quăng mỗi cái đoạn code lỗi lên đây và để đấy.

isgraph

Bạn đang nói đến vấn đề nào thế?

Huy Trần viết 12:47 ngày 01/10/2018

string lo = “son tungMTP” ;

for (int i = 0; i < lo.size(); i++)
{
	if (isgraph(lo.at(i)))
	{

	}
	else
	{
		if (lo.at(i) == lo.at(i - 1))
		{
			cout << lo << endl;
		}
	}
	
	
}

tôi dùng ntn thì nó lại chạy được =)))

HK boy viết 12:47 ngày 01/10/2018

Bạn có hiểu hàm isgraph dùng để làm gì không thế?
Trong trường hợp này, tốt nhất nên đặt điều kiện của vòng for để tránh lỗi truy cập ngoài string như vừa rồi.

Huy Trần viết 12:46 ngày 01/10/2018

tôi lên gg thì thấy bảo hàm isgraph để kiểm tra xem trong kí tự đó có phải trong bảng mã ascii không nếu mà không thì nó trả về giá trị khác 0

Huy Trần viết 12:55 ngày 01/10/2018

ông sửa hộ tôi cho đúng với, cảm ơn trước =)))))

HK boy viết 12:59 ngày 01/10/2018

Bạn thử tư duy một chút:

  • Vai trò của hàm isgraph trong đoạn code này là gì? Có cần thiết phải giữ lại không?

hàm isgraph để kiểm tra xem trong kí tự đó có phải trong bảng mã ascii không

Nếu như nhập 1 string toàn các kí tự trong bảng mã ASCII thì đâu cần phải kiểm tra nữa?

  • i = 0 -> i - 1 = -1 -> truy cập ngoài mảng -> i = ? để không bị truy cập ngoài mảng?

ông sửa hộ tôi cho đúng với, cảm ơn trước =)))))

Code mà lười sửa vs debug thì… xin lỗi bạn.

Huy Trần viết 12:54 ngày 01/10/2018

không phải lười sửa mà là chưa bt hướng giải quyết ntn thôi =)))

Duc Khan viết 12:43 ngày 01/10/2018

for (int i = 0; i < lo.size(); i++)
{
if (lo.at(i) == lo.at(i - 1))
{
break;
}
}
cout << lo << endl;

Với i=0 thì khi chạy nó sẽ gọi lo.at(-1), ngoài phạm vi của mảng nên sẽ throw exception std::out_of_range. Bạn nên khởi tạo i=1.[quote=“huy99ls01, post:1, topic:51119”]
for (int i = 0; i < lo.size(); i++)
{
if (isgraph(lo.at(i)))
{
}
else
{
if (lo.at(i) == lo.at(i - 1))
{
cout << lo << endl;
}
}
}
[/quote]

Hàm isgraph kiểm tra kí tự có phải là kí tự in ra được màn hình hay không. Ở đây lo là chuỗi bạn nhập từ bàn phím nên toàn kí tự có thể in ra được. Do đó isgraph(lo.at(i) đúng và sẽ không nhảy vào block else nên không xảy ra exception.

Hung viết 12:47 ngày 01/10/2018

Trang này có thể giúp bạn phần nào

lmgtfy.com

LMGTFY

LMGTFY

Huy Trần viết 12:51 ngày 01/10/2018

đúng cái mình muốn hỏi, cảm ơn bạn duckhan

Huy Trần viết 12:54 ngày 01/10/2018

mình tìm rồi bạn ơi =))

Bài liên quan
0