嗨,伙计们,你们可以帮助我,我试图从输入中获取文本并将其保存到字符串,其大小取决于输入,所以我分配了它,但是当我尝试释放内存错误时,我试图将它删除但是我坚持了这里。如果没有free(),它会正常结束,我尝试使用linux并执行,但在视觉工作室问题出现时,我应该担心吗?
调试器坚持这个 / * *如果此ASSERT失败,则传入错误的指针。可能是 *完全是假的,或者它可能是从另一个堆分配的。 *指针必须来自'本地'堆。 * / _ASSERTE(_CrtIsValidHeapPointer(pUserData));
int unosUBuffer(char *tmpBuffer,int spaceCounter)
{
int i = 0;
int input = ' ';
do
{
input = getchar();
if(input ==' ')
{
spaceCounter ++;
}
tmpBuffer = (char*)realloc(tmpBuffer,(sizeof(char))* i+1);
tmpBuffer[i] = input;
i++;
}while(tmpBuffer[i-1] != '\n');
tmpBuffer[i-1] = '\0';
return spaceCounter;
}
int main(int argc, char *argv[])
{
int spaceCounter = 0;
char *tmpBuffer;
char *line;
tmpBuffer = (char*)malloc(sizeof(char));
welcomeScreen();
spaceCounter = unosUBuffer(tmpBuffer, spaceCounter);
printf("\n space counter = %d", spaceCounter);
free(tmpBuffer);
return 0;
}
Sry们我用错误的函数名称粘贴错误的代码,函数unosUBuffer()和inputBuffer()是相同的函数,它的unosUBuffer()。
答案 0 :(得分:3)
tmpBuffer
的返回值来更改inputBuffer()
中的{p> realloc()
,但main()
将无法知道新值,并尝试释放旧版本缓冲区是。
旧缓冲区可能已被realloc()
释放,再次释放它可能会导致崩溃。
你应该让参数tmpBuffer
成为char*
的指针,让main()
知道新缓冲区的位置。