C 程序通过多次调用 realloc() 崩溃

标签 c visual-studio-2010 realloc

过去几天,我一直在为我的 C 类作业断断续续地工作,遇到了一个关于 C 中的 realloc() 函数的奇怪崩溃。即使是内部的 C/C++ 程序员也无法立即回答我我的代码可能有什么问题。

首先我在一个函数中创建内存块:

char *line = (char *)malloc( sizeof(char) * BUFSIZE);

然后我调用 getMoreBuf(start_of_block, end_of_block)

int getMoreBuf(char *start, char *end)
{
char *newBuf = 0;
int newSize = (end - start) + BUFSIZE;
    newBuf = (char *)realloc(start, sizeof(char) * newSize);
    if(NULL == newBuf) {
        printf("No virtual RAM available");
    }else{
        start = newBuf;
    }
    return newSize;
}

根据我对 BUFSIZE 的设置,它会在第 5 次调用 (BUFSIZE = 1) 或第 3 次调用 (BUFSIZE = 5) 后崩溃,并用无意义的字符替换读取的字符。

有人可以指出我的错误并提供建议在哪里阅读以修复它们吗? 任何帮助表示赞赏。 :)

奖励问题:我 malloc 一个内存块,指针 1 指向开始,后来指针 2 point2 指向内存块中的单个 block 。我 realloc() block 并且由于大小问题移动了 block ,指针 2 是否仍然指向旧的(现在无用的) block 或者它是否随着 realloc“移动”到内存块的新位置?

(同样为了将来,我应该把那个额外的问题放到一个新问题中还是我可以把它留在这里因为它与第一个问题密切相关?)

谢谢大家的意见,这对我找出问题所在有很大帮助。 如果可以的话,我会将每个标记为正确答案,因为每个都以某种形式帮助我更多地了解所有这些该死的指针业务。 =)

最佳答案

这个:

start = newBuf;

正在修改开始。但是 start 是一个局部变量;它不会影响调用者拥有的变量。

要解决这个问题,要么将start作为指向指针的指针,要么返回newBuf

关于C 程序通过多次调用 realloc() 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274023/

相关文章:

c++ - 如何在共享对象构建中包含子目录

c - dlsym() 错误 : ./dynlibrary: undefined symbol: method

c - 在子进程调用 exec() 之后使用 pipeline()

c++ - 我*认为*我有内存泄漏。现在怎么办?

c - 在 C 中重新分配数组

c - 将值插入最大二进制堆时遇到问题

C 动态增加队列

python - 如何返回指向ctypes中结构的指针?

visual-studio-2010 - 如何在 Visual Studio 2010 中设置 CUDA 编译器标志?

.net - Visual Studio 2010 Ultimate 版是否包含内置的 TFS 服务器?