Я немного новичок в C, и мне трудно понять, как работает память, особенно встроенные функции, такие как memcpy
.
Вот struct
, которым я пользуюсь
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
Но это вызывает Seg Fault:
memcpy(data->data,"123456a",strlen("1234567890a")+1);
Мой вопрос: почему? И как мне этого избежать? Пожалуйста, имейте в виду, что я новичок в C, поэтому то, как C работает с памятью, для меня немного новое.
Спасибо.
Редактировать: Это работает! Большое тебе спасибо. Полностью пропустил указатель данных. Теперь все работает нормально по valgrind.