c - realloc功能好像不行!这个程序来自教科书

标签 c crash realloc

我的代码(或书中的示例)似乎不起作用。我知道这是 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/

相关文章:

c - 重新分配 C 数组以获得更多空间

c - 正确使用strcmp函数?

c++ - 您将如何对内存分配器进行单元测试?

c++ - 添加元素到列表会导致程序崩溃...有时

c++ - 暴力破解不同输入导致程序崩溃的策略是什么?

windows - 安装错误的驱动程序后恢复Windows和/或系统还原

c - 增加结构尺寸,然后将其重置回原始尺寸并再次增加尺寸

C - 动态数组

c++ - 函数参数上的分号

c - 需要有关 PVoid 的帮助