我可以对我的程序使用一些帮助,
我写了一个计算句子中字谜数量的程序,我正在使用malloc()
函数,你可以在我的代码**ArrPtr=malloc
中看到。
我用它来计算字谜,在完成之后我想继续我的第二部分程序,我希望用free(arrPtr);
释放内存
并且程序崩溃(当我没有使用免费选项时它没有崩溃)。
这是我的代码,
void main()
{
char str[1001] = { 0 };
char temp[1001] = { 0 }, temp2;
char strB[1001] = { 0 };
int printf_i, counter, i, q, flag, j = 1, r = 0, m = 1, length = 0, root = 0, m1 = 0;
int max_analogy = 0, counter2 = 0, O, sum, sum2;
char **arrPtr;
int k = 0;
int **matrix;
printf("Please enter the sentence, and then press Enter:\n");
gets(str);
//bubble sort
strcpy_s(strB, 1001, str);
for (i = 0; i < strlen(strB); i = q + 2)
{
do
{
flag = 0;
for (q = i; strB[q + 1] != 32 && strB[q + 1] != 0; q++)
{
if (strB[q] > strB[q + 1])
{
// Swap
temp2 = strB[q];
strB[q] = strB[q + 1];
strB[q + 1] = temp2;
flag = 1;
}
}
} while (flag != 0);
}
counter = 1;
length = strlen(strB);
for (i = 0; strB[i] != 0; i++)
{
if (strB[i] == 32)
{
strB[i] = 0;
counter++;
}
}
arrPtr = (char*)malloc(sizeof(char)*counter);
arrPtr[0] = strB;
q = 1;
for (i = 0; i < length - 1; i++)
{
if (strB[i] == 0)
{
arrPtr[q] = &strB[i + 1];
q++;
}
}
counter2 = 0;
for (i = 0; i < counter; i++)
{
for (q = i + 1; q < counter; q++)
{
if (arrPtr[q] == 0 || arrPtr[i] == 0)
continue;
if (!strcmp(arrPtr[q], arrPtr[i]))
{
counter2++;
arrPtr[q] = 0;
}
}
if (max_analogy < counter2)
max_analogy = counter2;
counter2 = 0;
}
printf("The maximum number of anagram words in this sentence is %d.\n", max_analogy);
free(arrPtr);
}
答案 0 :(得分:1)
arrPtr = (char*)malloc(sizeof(char)*counter);
错误的原因很多:
arrPtr
是(char **)
。 sizeof(char *)
原因3是您遇到问题的真正原因:您在编写counter
(最有可能是counter*sizeof(char *)
)时分配counter*8
字节,因此您正在写出超出已分配内存的范围破坏malloc
内存池。
您可以使用
修复它arrPtr = malloc(sizeof(char *)*counter);