【发布时间】:2012-07-26 20:07:05
【问题描述】:
更新:对不起,只是一个大错误。写int *a = 3; 是没有意义的,但是请想像TCHAR *a = TEXT("text") 这样的案例的类比; (我编辑了我的问题,所以有些答案和 cmets 很奇怪,因为它们是针对我不适合的原始问题的)
在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 类型的值。
【问题讨论】:
-
对不起,这只是一个错字。 test() 返回一个指向 int 的指针。
-
TCHAR和TEXT的定义是什么?你的问题很困惑。 a 和 b 只是名称;它们没有被“删除”,它们超出了范围。没有“内存块”,只有一个字符串文字“aaa”,每次都从测试返回(假设 TEXT 只是一个 noop 或一个演员)。
-
你发布的代码格式很糟糕,语法不正确;发布真实代码并正确缩进。至于SetTabToolTipText是否分配内存,需要阅读其规范。
-
@Jim,我的问题是,如果我每次使用字符串“aaa”,它都会分配内存。如果您能指出为什么代码格式如此糟糕,我们将不胜感激。
标签: c winapi function memory pointers