smallcheng3.14 2021-03-23 20:35 采纳率: 33.3%
浏览 59

Leetcode13 运行完后出现Heap buffer overflow

char * intToRoman(int num){
	int n;
	int x = 1000;
	char* s1;
	char* s = (char*)malloc(16 * sizeof(char));
    s1=s;
	while (x != 0) {
		n = num / x % 10;
		if (n != 0) {
			if (x == 1000) {
				if (n == 1) {
					*s1++ = 'M';
				}
				if (n == 2) {
					*s1++ = 'M';
					*s1++ = 'M';
				}
				if (n == 3) {
					*s1++ = 'M'; 
					*s1++ = 'M';
					*s1++ = 'M';
				}
			}
			if (x == 100) {
				if (n == 1) {
					*s1++ = 'C';
				}
				if (n == 2) {
					*s1++ = 'C'; 
					*s1++ = 'C';
				}
				if (n == 3) {
					*s1++ = 'C';
					*s1++ = 'C';
					*s1++ = 'C';
				}
				if (n == 4) {
					*s1++ = 'C';
					*s1++ = 'D';
				}
				if (n == 5) {
					*s1++ = 'D';
				}
				if (n == 6) {
					*s1++ = 'D';
					*s1++ = 'C';
				}
				if (n == 7) {
					*s1++ = 'D';
					* s1++ = 'C';
					*s1++ = 'C';

				}
				if (n == 8) {
					*s1++ = 'D';
					*s1++ = 'C';
					*s1++ = 'C';
					*s1++ = 'C';
				}
				if (n == 9) {
					*s1++ = 'C';
					*s1++ = 'M';
				}
			}
			if (x == 10) {
				if (n == 1) {
					*s1++ = 'X';
				}
				if (n == 2) {
					*s1++ = 'X';
					*s1++ = 'X';
				}
				if (n == 3) {
					*s1++ = 'X';
					*s1++ = 'X';
					*s1++ = 'X';
				}
				if (n == 4) {
					*s1++ = 'X';
					*s1++ = 'L';
				}
				if (n == 5) {
					*s1++ = 'L';
				}
				if (n == 6) {
					*s1++ = 'L';
					*s1++ = 'X';
				}
				if (n == 7) {
					*s1++ = 'L';
					*s1++ = 'X';
					*s1++ = 'X';
				}
				if (n == 8) {
					*s1++ = 'L';
					*s1++ = 'X';
					*s1++ = 'X';
					*s1++ = 'X';
				}
				if (n == 9) {
					*s1++ = 'X';
					*s1++ = 'C';
				}
			}
			if (x == 1) {
				if (n == 1) {
					*s1++ = 'I';
				}
				if (n == 2) {
					*s1++ = 'I';
					*s1++ = 'I';
				}
				if (n == 3) {
					*s1++ = 'I';
					*s1++ = 'I';
					*s1++ = 'I';
				}
				if (n == 4) {
					*s1++ = 'I';
					*s1++ = 'V';
				}
				if (n == 5) {
					*s1++ = 'V';
				}
				if (n == 6) {
					*s1++ = 'V';
					*s1++ = 'I';
				}
				if (n == 7) {
					*s1++ = 'V';
					*s1++ = 'I';
					*s1++ = 'I';
				}
				if (n == 8) {
					*s1++ = 'V';
					*s1++ = 'I';
					*s1++ = 'I';
					*s1++ = 'I';
				}
				if (n == 9) {
					*s1++ = 'I';
					*s1++ = 'X';
				}
			}
		}
			x = x / 10;
		}
		return s;
}

该如何解决

  • 写回答

1条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-03-23 20:49
    关注

    在中间打印 s1, 看看 s1 的值都变成什么了。 

    评论

报告相同问题?