函数调用值丢失后 C 返回结构指针

标签 c struct

我试图找出为什么我的结构值在函数返回后丢失。

struct A {
   int val1;
   int val2;
}

main() {
   struct A *a;
   a->val1 = 1;
   a->val2 = 2;
   calc((void*)a);
   // calc returns and a's values are 1 and 2 respectively
}

void calc(void* v) {
     struct A *a = (struct A*) v;
     ...
     a->val1 = 2;
     a->val2 = 3;
}

最佳答案

当你想处理指针时,你必须引入动态内存分配。创建指针意味着您告诉编译器“我将在其中存储变量的地址”。因此,在这种情况下,要么创建一个对象,为其分配地址,要么动态为其分配内存。

案例1:

main() {
   struct A *a;
   struct A obj;//assign address of other object manually
   a = &obj;
   a->val1 = 1;
   a->val2 = 2;
   calc((void*)a);
   // calc returns and a's values are 1 and 2 respectively
}

案例2:

main() {
   struct A *a;
   a = (A *) malloc(sizeof(A));//dynamic memory allocation
   a->val1 = 1;
   a->val2 = 2;
   calc((void*)a);
   // calc returns and a's values are 1 and 2 respectively
}

关于函数调用值丢失后 C 返回结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40966338/

相关文章:

c - 程序在 t->time = t0 行崩溃;

c++ - 警告从结构的 QList 中删除动态创建的结构

c - GStreamer - 使用 RTSP 服务器编译

c - 如何知道 va_list 的最后一个参数?

C11 替代兰特?

c++ - 对包含指针的结构进行 Qsort

c - 数组的返回值全部为0

c - OpenGL glAttachShader 不工作

C:难以理解这个基于文件/结构的指令

c++ - 函数在 C++ 中返回一个结构?