Top.Mail.Ru
Ответы

Выделение места в куче типа 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;
}

Аватар пользователя
Высший разум
12345678910111213141516171819
 #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).
Хранится в войд, создается в чар, передается в инт, конвертируется в дабл. Главное при этом следить за размером)

1234567891011121314151617181920212223
 #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));