Forum: PC-Programmierung Speicherleck in TCL?


von TCL (Gast)


Lesenswert?

Hallo Gemeinde,

ist hier jemand mit TCL unter C unterwegs?

Ich habe ein seltsames Problem: Wenn ich den TCL-Interpreter in einem 
Thread erzeuge, dann frisst das Test-Programm Speicher. Wenn ich das 
ganze in einem einzigen Thread mache, wird der Speicher nicht gefressen.

Folgendes minimalisierte Programm:
1
#include <stdio.h>
2
#include <tcl.h>
3
#include <pthread.h>
4
5
void *call_run(void *arg) {
6
7
  printf("Thread created\n");
8
9
  Tcl_Interp *interp = Tcl_CreateInterp();
10
  usleep(1000000);
11
  Tcl_DeleteInterp(interp);
12
13
  printf("Thread destroyed\n");
14
15
  return NULL;
16
}
17
18
int main(int argc, char *argv[]) {
19
20
  Tcl_FindExecutable(argv[0]);
21
22
  for (;;) {
23
24
    //(void *) call_run(NULL);
25
26
    pthread_t th;
27
    pthread_create(&th, NULL, &call_run, NULL);
28
    pthread_detach(th);
29
30
    usleep(2000000);
31
  }
32
33
  return 0;
34
}

In dieser Form wird der Speicher gefressen, wenn ich die Zeile '(void *) 
call_run(NULL);' entkommentiere und stattdessen die drei folgenden 
Zeilen auskommentiere, dann wird der Speicher nicht gefressen.

Festgestellt habe ich das unter Ubuntu 16.04, TCL 8.6.1

Hat jemand eine Idee dazu?

Danke

von TCL (Gast)


Lesenswert?

Ach ja, compiliert habe ich das mit

gcc -I/usr/include/tcl -C test.c -ltcl -lpthread -o test

von (prx) A. K. (prx)


Lesenswert?

Ein Thread benötigt eigenen Speicher, hauptsächlich für den Stack.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.