РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1586 of 1593 menu

Функция C.free

Функция C.free освобождает память, ранее выделенную с помощью C-функций выделения памяти, таких как C.malloc, C.calloc или C.CString. В качестве единственного параметра она принимает указатель на память, который был возвращен при выделении. Важно всегда освобождать выделенную память, чтобы избежать утечек памяти. Функция C.free не возвращает значения.

Синтаксис

C.free(ptr)

Пример с C.malloc

Давайте выделим память для целого числа с помощью C.malloc, используем ее и освободим с помощью C.free:

package main /* #include <stdlib.h> */ import "C" import "fmt" func main() { ptr := C.malloc(C.sizeof_int) defer C.free(ptr) val := (*C.int)(ptr) *val = 42 fmt.Println(int(*val)) }

Результат выполнения кода:

42

Пример с C.CString

Давайте создадим C-строку с помощью C.CString, используем ее в C-функции и освободим с помощью C.free:

package main /* #include <stdio.h> #include <stdlib.h> void printString(const char* str) { printf("%s\n", str); } */ import "C" import "unsafe" func main() { str := "Hello from Go" cstr := C.CString(str) defer C.free(unsafe.Pointer(cstr)) C.printString(cstr) }

Результат выполнения кода:

"Hello from Go"

Пример с освобождением памяти в C-функции

Иногда память выделяется в Go, но освобождается в C-функции. Давайте посмотрим, как это можно сделать:

package main /* #include <stdlib.h> void freeMemory(void* ptr) { free(ptr); } */ import "C" import "unsafe" func main() { ptr := C.malloc(1024) C.freeMemory(ptr) }

В этом примере память выделяется с помощью C.malloc в Go, а освобождается в C-функции freeMemory. Такой подход может быть полезен, когда управление памятью лучше делегировать C-коду.

Смотрите также

  • функцию C.CString,
    которая создает C-строку из Go-строки
  • функцию C.GoString,
    которая преобразует C-строку в Go-строку
  • функцию C.CBytes,
    которая создает C-байтовый массив из Go-слайса
  • функцию C.GoBytes,
    которая преобразует C-байтовый массив в Go-слайс
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить