Списки ссылок и освобождение памяти в C - PullRequest
1 голос
/ 05 апреля 2020

Я пытался создать простую структуру списка ссылок, но по какой-то причине, когда я тестировал освобождение данных в LL, это дало бы мне ошибку неверного указателя. Кто-нибудь может объяснить, почему?

#include <stdio.h>
#include <stdlib.h>

void add();

typedef struct node{
    char* data;
    struct node* next;
} node;

node** n;

int main(int argv, char** argc){

  n = (node**)malloc(sizeof(node*)*10);
  int i;
  for(i = 0; i < 10; i++){
    n[i] = NULL;
  }
  add();
  free(n[0]->data);

  return 0;
}
void add(){
  char* temp = (char*)malloc(sizeof(char)*4);
  temp = "Meh\0";
  n[0] = (node*)malloc(sizeof(node));
  n[0]->data = temp;

}

1 Ответ

2 голосов
/ 05 апреля 2020
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh\0";

Ваше присвоение temp является виновником, так как оно устанавливает его для указания на строку символов c stati "Meh \ 0", которая не является вашей free. В этом случае ваш mallo c не действует, так как вы немедленно заменяете его, указывая вместо этого на stati c data. Используйте memcpy или аналогичный, если вы хотите скопировать данные в память, выделенную malloc.

...