【问题标题】:assigning values to a copied pointer in a function C将值分配给函数C中的复制指针
【发布时间】:2015-10-15 16:14:23
【问题描述】:

我有这个:

typedef struct{
int x;
int y;
}T;
void f(T** t)
{
    T t1;
    *t=malloc(sizeof(T)*T_MAX_SIZE);
    t1.x=11;
    t1.y=12;
    (*t)[0] = t1;
}

我希望它可以移动指针,而不是使用位置,我不确定问题出在哪里或出什么问题,代码:

void f(T** t)
{
 T t1;
 T t2;
 T** copy=t;
 *t=malloc(sizeof(T)*T_MAX_SIZE);
 t1.x=11;
 t1.y=12;
 t2.x=21;
 t2.y=22;
 **copy=t1;
 copy++;
 **copy=t2;

}
int main()
{
 T* t;
 f(&t);
 printf("%i %i\n",t[0].x,t[1].x);
 free(t);
}

这是以下线程的继续 ->Copying Struct to a Pointer array in a function C

这不起作用:/

【问题讨论】:

  • 我强烈建议阅读一本好的 C 书籍中的指针。对我来说,它看起来像是原始问题的重复。如果不是,则不清楚您真正想要完成什么。指针指向内存中的“位置”。

标签: c pointers struct dynamic-memory-allocation


【解决方案1】:

你的间接级别是错误的。应该是:

void f(T** t)
{
    T t1;
    T t2;
    T* copy = *t = malloc(sizeof(T)*T_MAX_SIZE);
    t1.x=11;
    t1.y=12;
    t2.x=21;
    t2.y=22;
    *copy=t1;
    copy++;
    *copy=t2;    
}

您发布的代码在一个只有一个元素的序列中前进到“下一个”T*,即在main() 中由&t 寻址。没有这样的“下一个”元素,因此您的代码会调用未定义的行为。你很幸运,它没有彻底崩溃。

【讨论】:

  • T* copy = t = malloc... 是什么意思?那和 T copy = *t 有什么区别? *t= malloc...;?
  • 它的意思是“声明一个指向T的指针copy,并初始化它以保存存储在t中的取消引用地址中的值,该地址在被分配结果之前以下malloc 中的一个。这也意味着Olaf 是对的。您需要花更多时间研究正确编写的在C 中使用和操作指针变量的代码。
  • 含义相同:t = malloc(sizeof(T)*T_MAX_SIZE); T 复制 = *t;
  • ...或*t = malloc(sizeof(T)*T_MAX_SIZE); T* copy = *t;,如果您想将其正确格式化为单独的语句。
  • 非常感谢,有什么我应该看的书、维基、网站吗?我知道我不知道深内存分配/指针编程。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多