我正在学习C语言,并试图解决LeetCode的练习412.
我的问题是,当x
是127
时,当执行代码的第64行时,x
返回到124
值,程序进入无限循环.
第64行
output = realloc(output, sizeof(char *) * x);
我的整个代码:
#include <stdio.h>
#include <stdlib.h>
char **fizzBuzz(int n) {
int x, temp, x_aux, cont;
char **output;
output = NULL;
for (x = 1; x <= n; x++)
{
if (x % 3 == 0)
{
if (x % 5 == 0)
{
//answer[i] == "FizzBuzz" if i is divisible by 3 and 5.
output = realloc(output, sizeof(char *) * x);
output[x-1] = malloc(sizeof(char) * 9);
output[x-1][0] = 'F';
output[x-1][1] = 'i';
output[x-1][2] = 'z';
output[x-1][3] = 'z';
output[x-1][4] = 'B';
output[x-1][5] = 'u';
output[x-1][6] = 'z';
output[x-1][7] = 'z';
output[x-1][8] = 0;
}
else
{
//answer[i] == "Fizz" if i is divisible by 3.
output = realloc(output, sizeof(char *) * x);
output[x-1] = malloc(sizeof(char) * 5);
output[x-1][0] = 'F';
output[x-1][1] = 'i';
output[x-1][2] = 'z';
output[x-1][3] = 'z';
output[x-1][4] = 0;
}
}
else if (x % 5 == 0)
{
//answer[i] == "Buzz" if i is divisible by 5.
output = realloc(output, sizeof(char *) * x);
output[x-1] = malloc(sizeof(char) * 5);
output[x-1][0] = 'B';
output[x-1][1] = 'u';
output[x-1][2] = 'z';
output[x-1][3] = 'z';
output[x-1][4] = 0;
}
else
{
//answer[i] == i (as a string) if none of the above conditions are true.
output = realloc(output, sizeof(char *) * x);
cont = 1;
x_aux = x;
while (x_aux >= 10)
{
temp = x_aux % 10;
output[x-1] = realloc(output[x-1], sizeof(char) * cont);
output[x-1][cont-1] = temp + '0';
x_aux = (int)x_aux / 10;
cont += 1;
}
output[x-1] = realloc(output[x-1], sizeof(char) * (cont+1));
output[x-1][cont-1] = x_aux + '0';
output[x-1][cont] = 0;
}
}
return output;
}
int main()
{
char **string;
int num = 134;
int m, y;
string = fizzBuzz(num);
for (m = 0; m < num; m++)
{
for (y = 0; string[m][y] != 0; y++)
printf("%c", (char)string[m][y]);
printf("\n");
}
return 0;
}
谢谢!!
我知道解决方案的逻辑不是x
%正确的,但我想知道x
更改值(127
到124
)会发生什么.