gpt4 book ai didi

变量的 C 内存管理

转载 作者:太空狗 更新时间:2023-10-29 17:27:18 24 4
gpt4 key购买 nike

我是 C 的新手,目前遇到了一些麻烦。请看下面的代码:

int main (int argc, char *argv[]) {
int j = 2;
int i = 100;
int *pi = &i;

pi = &j; //those 2 lines should do nothing, in my opinion
pi = &i; //

pi[1] = -4;
printf("i = %d, j = %d, *pi = %d\n", i, j, *pi);
return EXIT_SUCCESS;
}

代码因段错误而失败。 gdb 的一些调查:

(gdb) print &j
$1 = (int *) 0x7fffffffde80
(gdb) print &i
$2 = (int *) 0x7fffffffde84

但是,如果没有这两行,代码可以正常工作,因为 i 和 j 似乎交换了内存中的位置 - 但为什么呢??

(gdb) print &j
$1 = (int *) 0x7fffffffde84
(gdb) print &i
$2 = (int *) 0x7fffffffde80

我问过我的老师,可惜她不知道。

提前致谢!

编辑:通过正常工作,我的意思是 printf 打印:i = 100, j = -4, *pi = 100 -- pi[1] 点在 j 上,看似

问题是,为什么这两行会改变什么?

最佳答案

pi 是一个指针,稍后您将指向一个整数

pi[1] = -4;

您正在访问不受您控制的内存或不是您分配的内存,因此会导致未定义的行为,从而导致段错误。

关于变量的 C 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com