[C] Een struct met pointers in een berkeley db opslaan

Pagina: 1
Acties:

  • active2
  • Registratie: Juni 2001
  • Laatst online: 26-10-2024

active2

Google is your friend

Topicstarter
Ik heb bijvoorbeeld deze struct:

code:
1
2
3
4
struct point {
  char *x;
  char *y;
}

Vervolgens wil ik dit opslaan in db formaat zoals beschreven staat in de manual van Berkeley DB:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  // Serialize the struct
  p = &data_buffer[0];
  len = strlen(info.x);
  memcpy(p, &len, sizeof(len));
  p += sizeof(len);
  memcpy(p, &info.y, sizeof(info.y));
  p += sizeof(info.y);

  memset(&key, 0, sizeof(key));
  memset(&data, 0, sizeof(data));
  key.data = "fruit";
  key.size = sizeof("fruit");
  data.data = data_buffer;
  data.size = sizeof(data_buffer);

Volgens de manual moet ik het op deze manier serializen en als ik het terug wil halen dan gaat het op de volgende manier: (Ook wel marshalling genoemd)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0) {
    strcpy(data_buffer, data.data);
    p = &data_buffer[0];
    memcpy(&len, p, sizeof(len));
    p += sizeof(len);
    info2.x = malloc(len);
    memcpy(info2.x, p, len);
    p += len;
    memcpy(&info2.y, p, sizeof(info2.y));
    p += sizeof(info2.y);
    printf("db: %s: key retrieved: data was %s and %s.\n", (char *)key.data, (char *)info2.x, (char *)info2.y);
  } else {
    dbp->err(dbp, ret, "DB->get");
  }

Als ik dit op deze manier ga uitvoeren dan krijg ik een Segmentation Fault.

Er even vanuit gaande dat de data structures en dergelijke al gedefinieerd zijn. Ik heb even de kleine gedeeltes gepaste die van belang zijn.

Meer informatie is hier te vinden: http://www.sleepycat.com/docs/ref/am_misc/struct.html

Google, Het mirakel van de 21e eeuw!!!!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-05 22:02

Creepy

Tactical Espionage Splatterer

Ben je al stap voor stap door je code heen gelopen? Op welke regel precies treed de segmentation fault op? Heb je zelf enig idee wat er ongeveer verkeerd kan gaan?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney