在此程序中,我必须创建一个指针系统,在仅读取较大输入的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

10-02 16:10