更新:抱歉,这是一个很大的错误。写int *a = 3;
是没有意义的但是请想一想像TCHAR *a = TEXT("text")
这样的案例的类比; (我编辑了我的问题,所以一些答案和评论很奇怪,因为它们是我原来不适合的问题)
在main函数中,假设我有一个指针TCHAR *a = TEXT("text");
然后它会执行以下代码:
int i;
for (i = 0; i < 1000; i++) {
a = test(i);
}
,函数TCHAR* test(int par)
由:
TCHAR* test(int par)
{
TCHAR *b = TEXT("aaa");
return b;
}
我的问题是,在执行上面的代码之后,但在程序结束之前,在内存中:
1. the pointer `a` remains?
2. The 1000 pointers `b` are deleted each time the function test(...) exits ?
3. But there are still 1000 memory blocks there?
事实上,我的问题来自以下代码,该代码显示了当鼠标位于选项卡控件中具有样式TCS_TOOLTIPS的选项卡项目时的工具提示:
case WM_NOTIFY
if (lpnmhdr->code == TTN_GETDISPINFO) {
LPNMTTDISPINFO lpnmtdi;
lpnmtdi = (LPNMTTDISPINFO)lParam;
int tabIndex = (int) wParam; // wParam is the index of the tab item.
lpnmtdi->lpszText = SetTabToolTipText(panel->gWin.At(tabIndex));
break;
}
我在想每次调用时内存使用量是否增加
SetTabToolTipText(panel->gWin.At(tabIndex))
,使用TCHAR
和TCHAR*
操纵并返回LPTSTR
类型的值。
答案 0 :(得分:2)
你不分配任何内存,所以你不必担心内存被释放。当您的vaiables超出范围时,它们将自动释放。在这个功能
int test(int par)
{
int *b = par;
}
你没有返回值,即使函数说它会返回int
,所以你应该这样做,就像在这一行
for (i = 0; i < 1000; i++) {
a = test(i);
}
您为a
分配test()
返回的值。还
int* a = 3;
int* b = par;
正在寻找麻烦。您正在为指针变量分配整数值。您可能应该重新考虑上面的代码。
答案 1 :(得分:2)
如果SetTabToolTipText
使用一些内存管理工具new / malloc或某些特定于操作系统的内部分配字符串,则应该进行额外的清理。否则会有内存泄漏。
如果内部没有发生这种情况(文档或注释等中没有提及),则很可能将指针返回到您通常用作只读的内部缓冲区。在这种情况下,不应该担心内存消耗的增加。
答案 2 :(得分:0)
指针应该包含地址...所以int* a = 3
是没有意义的......在函数中你没有为int分配内存(只有par变量,然后在函数结束时销毁),你分配用于在int* b
中存储地址的存储器,当功能结束时,该存储器也可以自由存放。