Realloc功能似乎不起作用!这个程序来自教科书

时间:2014-08-20 07:23:01

标签: 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()正常工作,更新后的分配正常工作,但崩溃了。

我正在尝试自我教我的自我,但这本书有太多这些奇怪的错误!

以下是我的代码,我realloc()只在代码中出现http://ideone.com/bY6CXk

1 个答案:

答案 0 :(得分:1)

您没有按数据类型扩展分配的大小。这意味着当您可能需要capacity时,您只需分配capacity * sizeof *psTemp个字节。这假设psTemp的类型是正确的,即不是void *。如果您显示了更多代码,则可以更轻松地提供帮助。