gpt4 book ai didi

c - 这个例子中的 char** 和 char* 有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:53 26 4
gpt4 key购买 nike

char** surname;
surname = (char**) malloc(size*sizeof(char*));

char* middle_initial;
middle_initial = (char*) malloc(size*sizeof(char));

for(int i = 0; i<5;i++){
surname[i] = (char*) malloc(surname_max*sizeof(char));
middle_initial[i] = *(char*) malloc(middle_max*sizeof(char)); // Please focus on this line
}

surname 是一个 double char pointersurname[i]i 是有道理的-surname 指向的第 th 个指针。

但是,middle_initial 让我感到困惑。中间的 initial[i] 是第 i 字符指针吗?如果是这样,为什么 malloc 在调试期间返回对取消引用的 *(char *) 而不是 (char *) 的值调用?

** 跟进问题** 我希望 middle_initial [i] 是 6 个字符指针,每个指针都有指向 1 个字符的能力。我可以在上面修改什么来做到这一点?

最佳答案

取消引用有效地“将类型的指针计数减少了一个”。

那里的每段代码都可以,除了...

middle_initial[i] = *(char*) malloc(middle_max*sizeof(char));

除了未定义的行为之外,这条线应该做什么? 我们现在不!作为 middle_initial 的类型是char* , 通过索引取消引用有效地引用了 char目的。然后,我们有不合逻辑的表达。 char*middle_max chars 分配在堆上,但是... *在前面取消引用分配的内存(可以初始化的内存,顺便说一句......)。然后,将这样一个垃圾值赋值给前面提到的char。在middle_initial .这个循环的结果是 middle_initial包含来自不可恢复的泄漏内存的垃圾字符。

当然,如果 size < 5 , 每当取消引用时,UB 无处不在!

关于c - 这个例子中的 char** 和 char* 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218784/

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