【发布时间】:2021-10-03 02:19:48
【问题描述】:
我有一个功能如下:
void foo (int *check){
*check= 9;
printf("*check: %d\n",*check);
//when I print "*check" here, the value changes as 9.
}
这是主要功能。
void main () {
int check=5;
foo(&check);
printf("check: %d\n",check);
//when I print "check", gives me 5.
}
我想更改“check”变量的值,但它不起作用。我在哪里犯错?谢谢!
我在运行时使用 makefile。 编辑: malloc 已被删除,现在它给了我分段错误(核心转储)错误
【问题讨论】:
-
你为什么在 foo 中调用 malloc?
-
Skip
check= malloc(sizeof(int));编译器已经为您传递指针的变量分配了内存。 -
check= malloc(sizeof(int));会覆盖传递给函数的值,也会造成内存泄漏。 -
“给我分段错误”无法重现,但您还没有发布Minimal Reproducible Example,这是显示您尝试过的最短的完整代码。
-
这段代码不起作用的原因。您在堆栈上创建一个变量并将其分配给五个,然后将指针传递给函数中的变量,在第一行的函数中,您将指针更改为堆中新分配的内存。第二行更新堆中的内存。最后,您有指向堆内存的指针,其值为 9,堆栈上的变量仍为 5。如果要更改堆栈上的变量,请不要更改函数内的指针(malloc 行)。
标签: c pass-by-value pass-by-pointer