相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

返回指向静态局部变量的指针是否安全?

我正在使用一些代码,这些代码广泛使用返回指向静态局部变量的指针的习惯用法.例如:

char* const GetString()
{
  static char sTest[5];
  strcpy(sTest, "Test");
  return sTest;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是安全的吗?

PS,我知道这是做同样事情的更好方法:

char* const GetString()
{
  return "Test";
}
Run Code Online (Sandbox Code Playgroud)

编辑: 道歉,功能签名当然应该是:

const char* GetString();
Run Code Online (Sandbox Code Playgroud)

c static

41
推荐指数
4
解决办法
3万
查看次数

返回一个数组(警告:函数返回局部变量的地址)?

返回一个数组(警告:函数返回局部变量的地址)?

接口

int* decimalConversion(int iX);
Run Code Online (Sandbox Code Playgroud)

履行

int* decimalConversion(int iX){
    int iMult[10] = {0,0,0,0,0,0,0};

    ...

    return iMult;  // <-- Warning: Function returns address of local variable
}
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c

4
推荐指数
1
解决办法
4130
查看次数