如何解决将 realloc 后的值保存在 realloc 中
我希望在这个问题上,我能为我的问题提供更好的背景。
我有一个struct sth
:
typedef struct sth {
int* tab;
int length;
}
我有一个结构数组sth
。但是,在这个函数中,我只传递了 sths
。在提供的代码中,我更改了选项卡数组中的值 - 在并行单元格中添加值。如果我不使用 realloc
,该函数工作正常。
但是,如果我使用 realloc
,则从函数返回后,这些值将设置为零。在函数内部,正如我所检查的,值在重新分配后发生了变化。
#define ELEM_IN_CELL 4
void (sth a,sth b) {
//changes i-th values a.tab[i] with b.tab[i] - works correctly
int help = 67;
if (I need to resize a.tab to bigger) {
if (i == a.length) { //If I add a new cell
if (i*ELEM_IN_CELL*sizeof(int) >= a.length*ELEM_IN_CELL*sizeof(int)) {
a.tab = realloc(a.tab,2*a.length*ELEM_IN_CELL*sizeof(int)+2; //The probable problem
}
a.tab[i++] = help;
a.length++;
printf(a.tab[i-1]); //Displays 67
}
}
}
我知道,realloc
返回一个指向内存量的指针并保存之前的内容。在 cppreference 我读过,它也可以复制内容并释放旧块,我开始怀疑这是否是解释的线索,因为函数内部的 printf
有效 - 因此有是否有足够的内存(如果内存不足,则不会释放旧内存块并返回空指针。)。这是使用指针到指针的情况吗?怎么样?
您是否看到问题的任何解释或解决方案?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。