我的代码(或书中的示例)似乎不起作用。我知道这是 realloc 函数造成的,因为我会在开始时分配一些内存到一定数量。如果我超过了原来分配的数量,我将通过 realloc() 来增加分配。
分配的内存是给一堆指针的,需要的指针越多,需要的内存也就越多。这些指针最终将指向输入中的字符串。无论如何,每当我在特定情况下尝试访问字符串中的数据时,都会发生崩溃。
我将 COUNT(我最初分配的金额)设置为 5。第六次输入后它将崩溃。但是,如果我只有 5 个,就不会崩溃。因此,我相信这与 realloc() 有关。
#define COUNT 5 // Initial number of strings
//code in between here
// ...
char** psTemp = NULL; // Temporary pointer to pointer to char
char* pTemp = NULL; // Temporary pointer to char
size_t str_count = 0; // Current string count
size_t capacity = COUNT; // Current maximum number of strings
// ...
if (str_count == capacity)
{
capacity += capacity / 4; // Increase capacity by 25%
if (!(psTemp = realloc(pS, capacity))) return 1;
pS = psTemp;
}
在上面你可以看到我的 COUNT 和 realloc() 函数。当我当前的输入数量(str_count)达到当前分配(容量)时,我将在达到限制时更新分配。
我在 Visual Studio 和 Pelles C 中尝试过此操作,但都遇到了类似的问题。
在 Wisual Studio '13 中,在我的第 6 次输入后它将崩溃,因为我的分配最初设置为 5。
在 Pelles C 中,我第 8 次输入后就会崩溃,为什么?我不知道。
我通过调试器运行它,realloc()
工作,更新的分配也工作,但它崩溃了。
我正在尝试自学 C,但这本书有太多奇怪的错误!
这是我的代码,我的代码中仅出现一次 realloc()
:http://ideone.com/bY6CXk .
最佳答案
您没有根据数据类型来缩放分配大小。这意味着当您可能需要 capacity * sizeof *psTemp
时,您只需分配 capacity
字节。这假设 psTemp
的类型正确,即不是 void *
。如果您展示了更多代码,那么帮助会更容易。
关于c - realloc功能好像不行!这个程序来自教科书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25398958/