PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 内存位址回传问题
楼主:
Kuba4ma
(哦吼)
2022-03-24 23:10:14
1.
char* GetMemory() {
char* p = (char *)malloc(100);
return p;
}
void test() {
char *str = NULL;
str = GetMemory();
strcpy(str, "hello world");
printf("%s\n", str);
}
int main(){
test();
}
2.
char* GetMemory() {
char p[] = "hello world";
return p;
}
void test() {
char *str = NULL;
str = GetMemory();
printf(str);
}
int main(){
test();
}
第一段的code会印出"hello world" 但是第二段不会
我的问题是
第二段code的GetMemory内做阵列宣告 不也是会配置内存给 p 吗?
那么做的事情和第一段code的GetMemory一样
为什么不会印出"hello world"
如果第二段code的p会因为function结束而不见的话
为什么第一段code的p不会消失
谢谢大家
作者:
Schottky
(顺风相送)
2022-03-25 00:19:00
置底十三诫之第五诫
作者: breeze08 (linuxer)
2022-03-25 00:23:00
第一段是把p内的值回传,然后p这个变量本身的空间(stack)被释放,而p回传值所指向的空间(heap)仍然存在
作者: ctrlbreak
2022-03-25 06:39:00
所以我都建议先学组语XD
楼主:
Kuba4ma
(哦吼)
2022-03-25 09:04:00
我理解了 谢谢各位大神
作者:
Dracarys
(MayShowGunMore)
2022-03-25 09:54:00
第一个p指向dynamically allocated的空间,第二段指向stack上的array。你应该是写C吧?那malloc就不用转型。
https://godbolt.org/z/cbT74jcz6
Clang会乖乖回传local variable的位址,gcc直接回传0。UB的情况code随便compiler生
作者: yesiah
2022-03-25 11:25:00
先读一下memory layout,弄懂什么东西在stack什么在heap
作者:
CoNsTaR
((const *))
2022-03-29 06:39:00
C string literal 其实有和主程式一样的 lifetime所以 `p[]` 改 `*p` 或是直接回传 `"hello world"` 就可以了
作者:
F04E
(Fujitsu)
2022-03-29 08:57:00
.....
继续阅读
[闲聊] 送书C++ Primer 4/e中文版
cyutdt
Re: [问题] 关于fflush的使用时机
descent
[问题] 请教一个 thread 和 queue 的问题
Shuhaur
[闲聊] C++ 支援相依型别的话会长怎样?
CoNsTaR
[问题] 写后端适合QT框架吗?
Isaea
[问题] 为什么会印两次child
abcd991276
[问题]关于YOLOv4检测结果座标和和准确率原始码
bbcc11598
Re: [问题] 二维阵列指标表示方法
Dracarys
[问题] 二维阵列指标表示方法
lllll12b56
[问题] is_nothrow_move_constructible 相关问题
alan23273850
Links
booklink
Contact Us: admin [ a t ] ucptt.com