【发布时间】:2012-03-05 15:38:45
【问题描述】:
在过去的几天里,我一直在为我的 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 指向内存块中的单个块。我 realloc() 块并且由于大小问题而移动了块,指针 2 是否仍然指向旧的(现在无用的)块,还是它与 realloc 一起“移动”到内存块的新位置?
(同样对于未来,我应该把那个额外的问题放到一个新问题中还是我可以把它留在这里,因为它与第一个问题密切相关?)
感谢大家的意见,这对我找出问题所在有很大帮助。 如果可以的话,我会将每个都标记为正确答案,因为每个都以某种形式帮助我更多地了解所有这些该死的指针业务。 =)
【问题讨论】:
-
Even the programmers 也许你应该尝试过 C 程序员?
-
是的,我试过一个 C 和一个 C++ 程序员,我只是忘了提及这一点。我解决了这个问题,我会查看链接。
标签: c visual-studio-2010 realloc