【问题标题】:Heap corruption when using realloc - VS 2010 [closed]使用 realloc 时的堆损坏 - VS 2010 [关闭]
【发布时间】:2011-11-27 04:26:02
【问题描述】:

所以我的 prgrm 工作正常,直到我尝试重新分配指针,但它不会一直崩溃。有时它会,有时它运行得很好。谁能告诉我我的代码有什么问题?

#include <stdio.h>
#include <cstdlib>
#include <cstring>

char getword(char[]); //return length

int main()
{   

    static char buffer[100];
    int wcount = 5, n = 0;
    char **p = (char**) malloc (wcount);
    int len = getword(buffer);
    while (len && n < wcount)
    {
        p[n] = (char *) malloc (len);
        strncpy(p[n++], buffer, len);
        len = getword(buffer);
        if (n == wcount)
        {
            wcount += 10;
            char** temp = (char**) realloc (p, wcount);
            if (temp == NULL)
                break;
            else
                p = temp;
        }
    }

    return 0;
}

char getword(char buffer[])
{
    int len = 0;
    char c = getchar();

    if (c == EOF)
        return len;

    while (c == 32 || c == '\n' || c == '\t' || c == '\v')
    {
        c = getchar();
    }
    do
    {
        buffer[len++] = c;
        c = getchar();
    }
    while (c != 32 && c != '\n' && c != '\t' && c != '\v' && c != EOF);
    buffer[len] = 0;
    return ++len;
}

【问题讨论】:

    标签: realloc


    【解决方案1】:

    char **p = (char**) malloc (wcount); 分配 wcount 字节,而不是 wcount 指针。同样realloc

    【讨论】:

    • 哦哦,我明白了。我知道了。这也行:
    • char **p = (char * *) malloc (wcount * sizeof(char * ));
    • 非常感谢雷蒙德!有用!! ^^!!!
    • 哇,谢谢!总是花最多时间去寻找那些小东西!
    猜你喜欢
    • 2021-12-30
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多