【发布时间】:2016-04-10 09:35:54
【问题描述】:
如果你“永远”留在同一个块中,右值会发生什么?
假设我有以下代码:
char buff[999];
time_t timer;
while(true){
...
time(&timer);
strcpy(buff, ctime(&timer));
...
}
在每次迭代中,右值 char * 将从 ctime 返回,但它会在迭代结束时被释放还是仅在块完成时被释放?
如果只是在块完成时,那么经过几百万次迭代,内存可能会被完成的右值char*填满,对吧?
(我用c和c++标记了这个,因为我也想知道这两者之间是否有区别)
【问题讨论】:
-
据我所知,它创建了一个临时对象,其范围取决于终止分号,即从 ctime(&timer) 返回的内容的范围在该语句的分号(;) 处,除非什么它返回是在堆上创建的,在这种情况下你有责任释放它。
-
阅读
ctime的手册页:四个函数 asctime()、ctime()、gmtime() 和 localtime() 返回指向静态数据的指针,因此不是线程安全的。 -
你不会永远停留在同一个块中,每次迭代都会创建一个新块。但这与你的问题无关。
-
为什么线程安全与内存泄漏有关? @DieterLücking
-
@kuhaku 我只是在复制整行。
标签: c++ c memory-management rvalue