【发布时间】:2019-05-23 03:05:44
【问题描述】:
我已决定学习 C 和 C++,但我为一个简单的任务而苦苦挣扎,无法理解它。非常感谢您的帮助。
在我的一个函数中,我创建了一个指针 *linesLenght,然后我调用了另一个函数来分配内存并填充数组。在其中一个函数中,会发生 1-3 次的重新分配。第一次一切顺利。但是在第二次尝试重新分配时,我得到一个损坏的大小与 prev_size 错误。
代码:
第一。功能
char * wordWrap (int width, const char * src ){
ulong len = strlen(src);
ulong lines = getLines(width,len);
int * linesLenght = getLinesLen(&lines, src, len, width);
... }
第二个功能
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;
}
第三个功能(这里我得到了错误)
void resizeLinesArr(ulong arrLen, int ** arr)
{
int * tmp = realloc(*arr, arrLen * sizeof(int));
if(tmp == NULL)
{
printf("realloc problem\n");
free(*arr);
exit(1);
}
else
{
*arr = tmp;
}
}
【问题讨论】:
-
你能提供更多关于你得到的确切错误的信息吗?
-
退出代码 134(被信号 6:SIGABRT 中断)////// *** `/home/stepnlub/....' 中的错误:损坏的大小与 prev_size:0x00000000024db300 * **
-
也许你正在用一个野指针破坏堆?
-
这是什么意思?
-
您在此处未显示的某些代码中写入了已分配缓冲区的边界,可能在“其他隐藏逻辑”中
标签: c memory memory-management realloc