Tag: 结构

为什么在释放指向它的指针后仍然可以访问结构的成员?

如果我定义一个结构…… struct LinkNode { int node_val; struct LinkNode *next_node; }; 然后创建一个指向它的指针…… struct LinkNode *mynode = malloc(sizeof(struct LinkNode)); …然后终于免费()它…… free(mynode); …我仍然可以访问结构的’next_node’成员。 mynode->next_node 我的问题是: 底层机制的哪一部分跟踪这个内存块应该代表一个结构LinkNode的事实? 我是C的新手,我期望在我使用指向我的LinkNode的指针上的free()后,我将无法再访问该结构的成员。 我期待某种“不再可用”的警告。 我想更多地了解基础流程的工作原理。

如何获得结构中的成员数量?

我想计算结构中的成员数量。 例如: typedef struct { char MrChar; int MrInt; long MrLong; } Bg_Typedef; Bg_Typedef FooStr; 我创建了一个函数原型,它应该返回结构中的成员数 int NumberOfMem(Bg_Typedef *psStructure); => NumberOfMem(&FooStr)应返回3

从C中的struct读取值

我试图从结构中读取一年来检查那一年是否是闰年。 我的代码目前是: typedef struct { int day; int month; int year; } date; 阅读它的地方是: int is_date_valid(date *d) { printf(“Year = %d\n”, d.year); //Checking if year is a leap year if ( d->year%400 == 0) printf(“%d is a leap year.\n”, d.year); else if ( d->year%100 == 0) printf(“%d is not a leap year.\n”, d.year); else if […]

对不同结构类型的类型转换指针是否合法(例如struct sockaddr * to struct sockaddr_in6 *)?

这是一个在struct shape , struct rectangle和struct triangle类型的指针之间进行类型转换的程序。 #include #include #include enum { RECTANGLE, TRIANGLE, MAX }; struct shape { int type; }; struct rectangle { int type; int x; int y; }; struct triangle { int type; int x; int y; int z; }; struct shape *get_random_shape() { int type = rand() % MAX; if (type […]

如何在运行时按名称访问结构字段?

C faqs以某种方式解释它, 这里是链接。 但我无法理解,有人能为我解释一下吗? 或者给我另一种方式? 非常感谢!

C编程。 如果我需要在头文件(.h)中引用它的实例,如何在.c中隐藏结构的实现

所以我很好奇如果我们需要在头文件中引用它的实例,如何在.c文件中隐藏结构的实现。 例如,我在头文件中有以下结构: struct List { NodePtr front; }; 我想在.c文件中声明NodePtr来隐藏它的实现。 在.c: struct Node { void *value; struct Node *next; }; typedef struct Node *NodePtr; 但当然比.h文件不知道NodePtr是什么…. 我怎么能以正确的方式做到这一点?

C – free()之后会发生什么?

我有这个结构类型,我malloc为,并在我释放后,指针仍然指向我分配的数据。 这只是因为指针指向可以释放但尚未重新分配的内存吗? #include typedef struct Katze { int value; } Katze; int main () { Katze *mew = malloc(sizeof(Katze)); mew->value = 8910; free(mew); printf(“mew: %i\n”, mew->value); // why does this still say “mew: 8910”? }

读取/将结构写入二进制文件

我正在运行一个有3个结构的程序,我在二进制文件中读/写的操作如下: struct Medico { int Id_Doctor; int Estado; char Nombre[60]; char Clave_Acceso[20]; char Especialidad[40]; struct Medico *next; }; typedef struct Medico *Medicazos; typedef struct Medico Meds; Medicazos Nuevo; FILE *Archivaldo; char especialida[40], password[20]; char nombre_doc[60]; int estado_doc, id_doc; Archivaldo=fopen(“md.dat”, “rb”); fclose(Archivaldo); if((Archivaldo=fopen(“md.dat”, “rb”))==NULL) { printf(“No se pudo abrir el archivo de Medicos\n”); //couldnt open file […]

将struct作为参数传递给pthread

好吧,我试图通过struct将一对数字传递给pthread pthread_create函数。 但是我传递的数字和调用函数时得到的数字是不同的和随机的 这是struct struct Pairs { long i,j; }; 并在主要内部 void main() { long thread_cmp_count = (long)n*(n-1)/2; long t,index = 0; struct Pairs *pair; pair = malloc(sizeof(struct Pairs)); cmp_thread = malloc(thread_cmp_count*sizeof(pthread_t)); for(thread = 0;(thread < thread_cmp_count); thread++){ for(t = thread+1; t < n; t++){ (*pair).i = thread; (*pair).j = t; pthread_create(&cmp_thread[index++], NULL, Compare, (void*) […]

访问PyObject的底层结构

我正在创建一个python c扩展,但很难找到我想做的文档。 我基本上想要创建一个指向cstruct的指针,并能够访问该指针。 示例代码如下。 任何帮助,将不胜感激。 typedef struct{ int x; int y; } Point; typedef struct { PyObject_HEAD Point* my_point; } PointObject; static PyTypeObject PointType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ “point”, /*tp_name*/ sizeof(PointObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ 0, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash […]