2016-11-11 40 views
-1

在这个程序中,我必须创建一个指针系统,在读取较大输入的80个字符后,将提供一个pointer-to-pointer-to-character操作。然后将结果发送到一个函数,以确定总输入中的单词数量和它们包含的平均字母数量。我的问题是,我不知道如何创建指针系统,而不会产生exc_bad_access警告。此外,我无法找到适合我需求的malloc和free组合。任何帮助,这将不胜感激。使用指针发送数组的指针C项目

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); 
} 
+0

你似乎试图在这里做字符串复制:'inputPtr =罗西;',我想。在C中,字符串不能像那样工作。在创建“指针系统”之前,您可能需要回过头几步并了解C字符串,无论您的意思如何。但是你应该考虑的一件事是,为什么你只有一次“malloc”,但是在循环中“free”? – hyde

+1

您在第一次迭代时泄漏了为'inputPtr'分配的内存。我们不知道“罗嗦”是什么。疯狂的猜测:这不是你的真实代码? – WhozCraig

+1

停止“试图找到malloc和free的组合,这将减轻我的这一点”,因为猜测不会奏效。请尝试从逻辑上理解它。如果你还没弄明白,那么你可能需要了解更多关于指针,字符串或'malloc'的信息,那很好。 – immibis

回答

1

让我们来仔细看您的代码这三行:

inputPtr = (char*)malloc(81 * sizeof(char)); 
... 
inputPtr = wordy; 
... 
free(inputPtr); 

第一分配内存,并且指针指向的内存分配给变量inputPtr

第二行重新分配inputPtr因此它不再指向您分配的内存。您将失去该内存,并有内存泄漏

最后的最后一行,在那里你尝试释放什么inputPtr指向,并且正是它指向我不知道,但它可能不是您与malloc分配的内存做。这导致未定义的行为

确切地说,如何解决你的问题我不确定,但一个好的开始是不动态分配内存,然后当然不会调用free