gpt4 book ai didi

c - 防止本地指针

转载 作者:太空狗 更新时间:2023-10-29 15:07:31 24 4
gpt4 key购买 nike

也许这是一个新手问题,但是 C/C++ 中是否有一种方法可以防止函数接受指向局部变量的指针?

考虑这段代码:

int* fun(void)
{
int a;
return &a;
}

编译器会生成一个警告,指出不能返回指针。现在考虑一下:

int* g;

void save(int* a)
{
g = a;
}

void bad(void)
{
int a;
save(&a);
}

这将在没有警告的情况下通过编译器,这很糟糕。是否有属性或其他东西可以防止这种情况发生? IE。像这样的东西:

void save(int __this_pointer_must_not_be_local__ * a)
{
g = a;
}

如果有人知道答案,请提前致谢。

最佳答案

至少有一种使用调试堆(默认)进行调试构建的方法:

//d:\Program Files\Microsoft Visual Studio ?\VC\crt\src\dbgint.h
\#define nNoMansLandSize 4
typedef struct _CrtMemBlockHeader
{
struct _CrtMemBlockHeader * pBlockHeaderNext;
struct _CrtMemBlockHeader * pBlockHeaderPrev;
char * szFileName;
int nLine;
size_t nDataSize;
int nBlockUse;
long lRequest;
unsigned char gap[nNoMansLandSize];
/* followed by:
* unsigned char data[nDataSize];
* unsigned char anotherGap[nNoMansLandSize];
*/
} _CrtMemBlockHeader;
\#define pbData(pblock) ((unsigned char *)((_CrtMemBlockHeader *)pblock + 1))

有一个分配头,它以间隙结尾,所以指针之前有 0xFDFDFDFD 的可能性不大 - 不完美,但可能有帮助......

if (\*((int\*)pointer-1) == 0xFDFDFD) { // stack pointer }

关于c - 防止本地指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com