假设我有以下功能:
char* allocateMemory()
{
char str[20] = "Hello world.";
return str;
}
int* another()
{
int x = 5;
return &x;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* pString = allocateMemory();
printf("%s\n", pString);
int* blah = another();
printf("%d %d \n", blah, *blah);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个printf打印随机值,因为str是LOCAL SCOPE.
第二个printf打印正确的值,blah =地址为blah,*blah = 5
为什么局部作用域只影响处理数组的allocateMemory,而不是整数?
为什么第一个printf(返回char*)打印随机值并受本地范围的影响,但不是第二个(返回int*)?
访问超出范围的方法的局部变量的两种方式是Undefined Behavior.这些是一些有效的方法:
char* allocateMemory()
{
char* str= malloc(sizeof(char) * 20); //assuming C
strcpy(str, "Hello World.");
return str; //Valid
}
const char* allocateMemory()
{
return "Hello world."; //Valid Hello World is in read only location
}
int* another()
{
int *x = malloc(sizeof(int)); //assuming C
*x = 5;
return x; //Valid
}
Run Code Online (Sandbox Code Playgroud)