我已经决定学习C和C ++,但是Im正在为一个简单的任务而苦苦挣扎,无法解决这个问题。我真的很感谢您的帮助。
在我的一个函数中,我创建了一个指针* linesLenght,然后调用了另一个函数来分配内存和填充数组。在其中一项功能中,发生了1-3次重新分配。第一次,一切顺利。但是当第二次尝试重新分配时,我收到了损坏的大小vs. prev_size错误。
代码:
1st。功能
@Autowired
private AuthoringEventIT authoringEventIT;
@PostMapping()
public ResponseEntity<Event> authorEvent(@RequestBody final EventRequest request) {
ProcessingResultEvent responseData = authoringEventIT.authoringEvent(request);
return responseData.getProcessedData();
}
第二个功能
char * wordWrap (int width, const char * src ){
ulong len = strlen(src);
ulong lines = getLines(width,len);
int * linesLenght = getLinesLen(&lines, src, len, width);
... }
第3个功能(在出现错误的地方)
int * getLinesLen(ulong * lines, const char * src, ulong srcLen, int maxLine){
int * linesLen = malloc((*lines) * sizeof(int));
ulong counter = 0;
for(int i = 0; i < srcLen; i++)
{
///other hidden logic....
if(counter == *lines)
{
printf("out! Must resize\n");
resizeLinesArr(counter + 1, &linesLen);
*lines += 1;
}
}
*lines = counter;
return linesLen;
}
答案 0 :(得分:0)
此错误:
corrupted size vs. prev_size
是malloc(或重新分配)的内部记录保持变量已损坏时打印的错误。几乎可以肯定,问题不在调用realloc的行中。在某个时候,您要么:
free()
之后,继续使用指针。这种事情通常很难追踪。我建议您尝试使用valgrind运行程序。首先,将-g
添加到传递给编译器的选项列表中。这将打开调试信息,这使Valgrind可以为您提供行号,而不仅仅是函数名。
然后像这样运行程序:
valgrind ./your_program
Valgrind将查看每个内存访问,并检查是否违反了我上面描述的两个规则。