В новых версиях VB.NET вы можете использовать встроенное выражение lambda вместо целого метода (если хотите)
Dim MyButton as New Button()
MyButton.Name = "MyButton"
AddHandler MyButton.Click, Sub(sender2, eventargs2)
'code to do stuff
'more code to do stuff
End Sub
Если у вас есть список ls
записей для каждого файла в каталоге, где content
- указатель на выделенный t_entry
, содержащий имя файла и stat
информацию, например,
typedef struct s_list {
void *content;
size_t content_size;
struct s_list *next;
} t_list;
и
typedef struct s_entry {
char *filename;
struct stat filestat;
} t_entry;
Функция freelist (t_list *head)
должна будет выполнять итерацию по каждому узлу, а также:
free
filename
, выделенных в каждом t_entry
; free
выделенный t_entry
; и наконец free
сам узел t_list
. Вы можете сделать что-то похожее на следующее:
void freelist (t_list *head)
{
t_list *node = head; /* temporary node to iterate list */
/* (you could use head, but don't) */
while (*node) {
t_list *victim = node; /* pointer to current node to free */
t_entry *entry = node->content; /* pointer to content */
free (entry->filename) /* free content->filename */
free (entry); /* free t_entry struct itself */
node = node->next; /* advance before freeing victim */
free (victim); /* free current t_list node (victim) */
}
}
Обратите внимание, что вместо использования node
, вы можете просто использовать head
для итерации, поскольку freelist
получает копию это не изменило бы адрес списка в любом случае - и так как список не останется, когда вы закончите, но гораздо лучше использовать временный узел для итерации списка (в любой функции), чтобы вы не путали обстоятельства, когда вы обрабатываете фактический адрес списка (например, параметр был t_list **
) или копию указателя (параметр был t_list *
).
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.
Вам нужно привести данные так, чтобы компилятор знал, где найти элементы структуры, вот полный пример:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
typedef struct s_list
{
void *content;
size_t content_size;
struct s_list *next;
}t_list;
typedef struct s_entry
{
char *filename;
struct stat filestat;
}t_entry;
int main(void)
{
t_list *foo = malloc(sizeof *foo);
t_entry *bar = malloc(sizeof *bar);
bar->filename = malloc(10);
foo->content = bar;
free(((t_entry *)foo->content)->filename);
free(foo->content);
free(foo);
return 0;
}