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

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 的值都变成什么了。 

    评论

报告相同问题?

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)