在此程序中,我必须创建一个指针系统,在仅读取较大输入的80个字符后,它将提供pointer-to-pointer-to-character
操作。然后将结果发送到一个函数,该函数确定总输入中的单词数以及它们包含的平均字母数。我的问题是,我不知道如何在不生成exc_bad_access
警告的情况下创建指针系统。另外,我找不到适合我需求的malloc和free的组合。任何帮助,将不胜感激。
inputPtr = (char*)malloc(81 * sizeof(char));
while (fgets(wordy, 81, stdin) != NULL) {
numChar = strlen(wordy);
inputPtr = wordy;
for (i = 0; i < groupRange; ++i) {
sentPtr[i] = &inputPtr;
}
if (numChar == 80) {
groupRange++;
}
free(inputPtr);
printwords(*sentPtr, numChar);
}
最佳答案
让我们仔细看看代码中的以下三行:
inputPtr = (char*)malloc(81 * sizeof(char));
...
inputPtr = wordy;
...
free(inputPtr);
第一个分配内存,并将指向该内存的指针分配给变量
inputPtr
。第二行重新分配
inputPtr
,因此它不再指向您已分配的内存。您将丢失该内存并发生内存泄漏。最后是最后一行,您尝试释放
inputPtr
所指向的内容以及它所指向的内容,我不知道,但这可能不是您使用malloc
分配的内存。这导致未定义的行为。确切如何解决我不确定的问题,但是一个好的开始是不动态分配内存,然后当然不调用
free
。