У меня есть эта функция, которая должна копировать узел в связанный список (не первый из него)
struct Node {
char* data;
Node* next;
};
void Insert(Node*head, int index, char* data) {//find a is function to find needed position
Node* temp = find(head, index);
Node* t = (Node*)malloc(sizeof(Node));
t->data = (char*)malloc(100);//where the problem is //line 4
strcpy(t->data, data);
t->next = temp->next;
temp->next = t;
}
, он будет работать хорошо, если строка 4 находится в моем коде. Я прочитал этот вопрос:
cra sh -или-ошибка-сегментации-когда-данные-копируются-сканируются-считываются-деинсталлируются
поэтому я знаю, что указатель не может содержать никаких данных, и я не могу скопировать / сохранить данные в указателе. Итак, как вы видите, я сначала выделил для него память, а затем поместил в нее данные, иначе моя программа обработает sh.
Но затем я использовал это: t->data = data;
, и это сработало, поэтому я хочу знать: почему, когда я использую strcpy
как этот strcpy(t->data, data);
, мне нужно сначала выделить память для t->data
, иначе моя программа потерпит крах; но это t->data = data;
будет работать хорошо, без необходимости выделять память?
Можете ли вы объяснить это мне?
PS: приведение mallo c происходит из-за использования компилятора c ++.