在过去的几天里,我一直在为我的C类任务而工作,并且在C中遇到了一个关于RealCuffor()函数的奇怪的崩溃。
首先,我在一个函数中创建内存块:
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指向内存块中的单个块。I realloc()由于大小问题,块和块被移动,指针2是否仍然指向旧的(现在无用的)块,或者它是否随着realloc“移动”到内存块的新位置?
(同样是为了将来,我是否应该把这个额外的问题放进一个新的问题中,或者我可以把它放在这里,因为它与第一个问题密切相关?)
谢谢大家的意见,这对我找出问题有很大帮助。
如果可以的话,我会把每一个都标为正确的答案,因为每一个都在某种程度上帮助我对所有这些该死的指针业务有了更多的了解。=)
最佳答案
我认为你的问题是你只改变了局部变量。。。你需要用一个指针。
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;
*end = *start + newSize;
}
return newSize;
}
然后你会这样称呼它:
getMoreBuf(&start_of_block, &end_of_block)