Выделение места в куче типа void для хранения данных любого типа
Прошу скинуть мне пример создания буфера в куче типа void, чтобы можно было туда записывать данные любого типа.
#include<stdio.h>
#include<stdlib.h>
int main()
{
void *buf=(void*)malloc(25*sizeof(void));
if(!buf) exit(1);
char *word="my text from void buffer\0";
buf=word;
while(*(char*)buf)
printf("%c", *(char*)buf++);
free(buf);
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#define COUNT 3
int main(void) {
size_t i;
void** ptr = (void**)malloc(COUNT * sizeof(void*));
for (i = 0; i < COUNT; ++i) ptr[i] = malloc(1);
char* name = "Maximov Boris";
int age = 28;
double temp = 36.5;
ptr[0] = (char*)name;
ptr[1] = (int*)&age;
ptr[2] = (double*)&temp;
printf("Name: %s\n", (char*)ptr[0]);
printf("Age: %i\n", *(int*)ptr[1]);
printf("Temperature: %.1lf\n", *(double*)ptr[2]);
free(ptr);
return 0;
}
Ну к примеру так
Сама структура выделяет в чарах но вы об этом не знаете и используете как вам нужно. Смысл в том, что не важно какой тип выделения, важно как интерпретируете.
В том числе можно написать что-то вроде double* a = (double*)mem.create<int>(10).
Хранится в войд, создается в чар, передается в инт, конвертируется в дабл. Главное при этом следить за размером)
#include <iostream>
using namespace std;
struct memmory
{
void* ptr;
int size;
template <class T>
T* create(int size)
{
ptr = new char[size*sizeof(T)];
return (T*)ptr;
}
};
int main()
{
memmory mem;
int* a = mem.create<int>(10);
a[9] = 34;
cout << a[9];
}
void * buf = malloc(sizeof(MyType));