讨论/技术交流/求助|家人们,本小白编程遇到个问题,请求各位大哥大姐解决/
求助|家人们,本小白编程遇到个问题,请求各位大哥大姐解决

第十二题,运行后提示我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
共 3 个回复

字符串末尾没有\0. 要么堆内存申请完先memset清零,要么手动在最后放个\0

1

你也全是if也挺离谱的。。

指针越界访问了,这种问题百度一下就行,你把malloc申请的开大一点。