adress of local variable 'G' returned
时间: 2023-07-14 11:13:23 浏览: 38
这个错误通常是因为你在函数中返回了一个局部变量的地址。当函数执行完毕后,局部变量所在的内存空间会被释放,此时返回的地址就没有意义了,因为那个内存空间可能已经被其他程序使用。
为了避免这个错误,你可以将局部变量的值复制到另一个内存空间中,并返回该内存空间的地址。或者你也可以使用动态内存分配函数(如malloc)来为变量分配内存空间,这样在函数执行完毕后,该内存空间不会被释放,返回的地址仍然有效。
例如,下面的代码会出现上述错误:
```
int *func() {
int G = 10;
return &G; // 返回局部变量的地址
}
```
可以改为:
```
int *func() {
int *pG = (int*)malloc(sizeof(int));
*pG = 10;
return pG; // 返回动态分配的内存地址
}
```
这样就可以避免错误了。
相关问题
address of local variable t returned
这个错误通常是因为函数返回了一个指向已经被销毁的栈上变量的指针。可能是因为函数返回了一个指向一个局部变量的指针,而当函数退出时,该变量将被销毁并且指针将不再指向该变量。要解决这个问题,你可以将变量声明为静态变量或使用动态内存分配来分配变量所需的内存。确保在返回指向变量的指针之前,该变量仍然存在于内存中。
address of local variable 'tmp' returned [-Wreturn-local-addr]
这是一个编译器的警告信息,它表示你在函数中返回一个局部变量的地址。这种做法是不安全的,因为一旦函数返回,局部变量所在的内存空间就会被释放,你返回的地址就指向了一个不确定的内存区域。为避免这种警告,你可以将局部变量的值拷贝到堆或静态存储区中,然后返回指向该存储区的指针。或者你也可以将返回类型改为指针类型,这样就可以直接返回局部变量的值了。