taking address of temporary错误<转>
时间: 2024-02-24 20:57:10 浏览: 76
这个错误通常发生在你尝试获取一个临时变量的地址时。临时变量是指在表达式求值期间创建的变量,其生命周期只在该表达式中存在。
在 C++ 中,不能获取临时变量的地址,因为当表达式结束时,临时变量将被销毁,该地址也将不再有效。如果你想在表达式外部持久地使用一个值,你应该将其存储在变量中。
例如,下面的代码将导致“taking address of temporary”错误:
```c++
int* p = & (a + b); // a + b 是一个临时变量
```
正确的方法是先将表达式的结果存储在变量中,然后使用该变量的地址:
```c++
int temp = a + b; // 将表达式结果存储在变量中
int* p = &temp; // 使用变量的地址
```
希望这可以帮助你解决这个问题。
相关问题
[{ "resource": "/media/HYS/7b0cc70c-b2f5-4925-b2ed-50e2ff537f8c/home/oem/study_task/screen_record/main.cpp", "owner": "makefile-tools", "severity": 8, "message": "taking address of temporary array", "source": "gcc", "startLineNumber": 132, "startColumn": 48, "endLineNumber": 132, "endColumn": 48 }]
根据您提供的编译器错误信息,问题似乎出现在第132行的代码中,该行涉及到临时数组的地址。
这个错误通常是由于将临时数组(例如字符串文字)的地址分配给指针变量而导致的。由于临时数组只在特定作用域中存在,因此取其地址并将其分配给指针变量是不安全的。
解决此问题的方法是使用`const char*`类型的指针变量来引用该临时数组的内容,而不是直接取其地址。例如,您可以使用`const char*`类型的指针变量来引用字符串文字,如下所示:
```cpp
const char* str = "Hello, World!";
```
请检查第132行代码,并确保没有将临时数组的地址分配给指针变量。如果问题仍然存在,请提供相关代码的更多上下文,以便我可以更好地帮助您解决问题。
Zlu.cpp:106:39: error: taking address of temporary array 106 | csr_matrix a = {5, 13, (double []){1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0}, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这个编译错误是因为你试图获取一个临时数组的地址,而这是不允许的。
在你的代码中,你正在创建一个临时数组,并将其传递给 `csr_matrix` 结构体的初始化器。然而,这个数组在初始化完成后就会被销毁,所以取它的地址是不安全的。
为了解决这个问题,你可以将数组存储在一个变量中,然后将该变量的地址传递给 `csr_matrix` 结构体的初始化器。像这样:
```
double a_data[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0};
csr_matrix a = {5, 13, a_data};
```
这样,`a_data` 数组不会被销毁,直到它超出作用域。
阅读全文