Я немного новичок в C, и мне трудно понять, как работает память, особенно встроенные функции, такие как memcpy
.
Вот структура
Я использую
struct data_t {
int datasize;
void *data;
};
А вот вспомогательная функция, с которой я ее использую:
struct data_t *data_create(int size)
{
struct data_t *dt=malloc(sizeof(struct data_t)+size);
dt->datasize=size;
dt->data="1234567890a";
return dt;
}
Теперь в функции main
у меня нет проблем делая это:
struct data_t *data = data_create(1024);
data->data="123456a";//just an example
Но это вызывает ошибку сегмента:
memcpy(data->data,"123456a",strlen("1234567890a")+1);
Мой вопрос: почему? И как мне этого избежать? Имейте в виду, что я новичок в C, поэтому то, как C работает с памятью, для меня немного ново
Спасибо.
Edit: Работает! Большое спасибо. Полностью пропустил указатель данных. Теперь по valgrind все работает нормально.