【发布时间】:2020-06-13 07:14:05
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ind=0;
void rea(int* function)
{
ind+=1;
function = realloc(function,sizeof(int) * ind);
function[ind-1] = 1;
}
int main(void)
{
int* fun = malloc(sizeof(int));
int a =0;
while(a<400)
{
int v = 0;
rea(fun);
puts("a");
a+=1;
ind+=1;
}
}
我不知道为什么它给了我错误:双重释放或损坏中止(核心转储)。我每次都增加 ind 并 [ind-1] 来分配值,因此它不应该越界。
【问题讨论】:
-
函数参数在 C 中按值传递。这意味着
rea修改了来自main的fun指针的副本,然后该指针立即被丢弃正如rea返回。您可以修改rea以返回重新分配的指针(就像realloc本身一样),或者将int **参数传递给它。 -
对 realloc
function = realloc(function,sizeof(int) * ind);的错误调用。你想重新分配什么? -
@我正在尝试重新分配
function。 -
短版:由于 C 的按值传递语义,
function = ...对rea的调用者 (main) 意味着 nothing。它在main中保留了fun的原始指针值,最终可以/将悬空。 -
见下面 Jean 的回答。对功能的任何更改都不会影响乐趣。