開發平台(Platform): (Ex: Win10, Linux, ...)
Linux 4.12.13-1-ARCH x86_64
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc 7.2.0
Glibc 2.26
問題(Question):
我想要在main裡面malloc後把指標傳到thread裡,在thread結束前free記憶體。
結果記憶體用量會隨著操作次數漸漸變大。
程式大致上長像這樣:
void *test(void *p)
{
pthread_detach(pthread_self());
free(p);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
... other code ...
pthread_t tid;
void *p = malloc(8*1024*1024);
pthread_create(&tid, NULL, test, p);
... other code ...
}
在main裡面做了很多次malloc、pthread_create的動作。
有確認過free都有執行到,如果不做malloc、free,單純建立theard然後退出都正常。
不過兩者合在一起用的時候就漸漸的把記憶體吃掉了。
還有哪裡可能有記憶體沒釋放到嗎?
預期的正確結果(Expected Output):
記憶體用量不會一直增加
錯誤結果(Wrong Output):
記憶體用量漸漸增加
程式碼(Code):(請善用置底文網頁, 記得排版)
完整的程式:https://ideone.com/SKWT5Q
補充說明(Supplement):
1.執行程式每次被吃的記憶體量會有一點點不一樣。
2.如果是在main裡面free的話就不會這樣。