开始没想明白,以下的函数返回的不是临时地址吗?怎么可以正确地工作?
void* CTest::getCaption(long index,)
{
char* libs[] = {
"Channel 0","Channel 1","Channel 2","Channel 3","Channel 4",
"Channel 5","Channel 6","Channel 7","Channel 8","Channel 9",
"Channel 10","Channel 11","Channel 12","Channel 13","Channel 14",
"Channel 15","Channel 16","Channel 17","Channel 18","Channel 19",
};
return libs[index];
}
改一下,再测试
void* CTest::getCaption(long index,)
{
char temp[80] = "12345";
char* libs[] = {
"Channel 0","Channel 1","Channel 2","Channel 3","Channel 4",
"Channel 5","Channel 6","Channel 7","Channel 8","Channel 9",
"Channel 10","Channel 11","Channel 12","Channel 13","Channel 14",
"Channel 15","Channel 16","Channel 17","Channel 18","Channel 19",
};
if(index == 0)
return temp;
return libs[index];
}
测试代码:
CTest ob;
void * p[10];
for(int i=0; i<10; i++){
p[i] = ob.getString(i);
}
for(i=0; i<10; i++){
if(0 == i){
printf("temp: %p/n", p[i]);
}else{
printf("[%02d]: %p/n", i, p[i]);
}
}
_asm{
mov i, EDX;
}
printf("-----------------/n");
printf("[DX]: %p/n", (void *)i);
原来,libs存储在数据段,而temp存储在堆栈之中!^_^