从函数返回时发生堆芯转储错误
Core dump error while returning from a function
我有一个函数:
void function(const string param1, string *p2param, string *retparam)
当从main
调用该函数时,执行一直进行到该函数的最后一行,然后失败
Bus Error(coredump)
该函数使用指向字符串的指针执行一些字符串操作,然后将最终值传递给*retparam
。
代码如下:aa.c有
string *f1;//global
string f2= "abc";//global
function_2()
{
stringstream aa;
*f1 += aa<<"test";
//similar concatenation
}
function(param1, *p2param, *retparam)
{
/* assign back the values*/
f1 =&f2;
//call to a function from bb.c
// from bb.c function_2() is in called
retparam = f1
}
我能得到的唯一信息是:
pstack core
$ pstack core
core 'core' of 4517: aa_test -t 745
ffffffff7c67109c __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2T5B6M_v_ (ffffffff7fffce98, 1002805fc, 10010cc90, 0, ffffffff7c8c3bd8, ffffffff7fffce98) + 14
0000000100004498 main (10010b000, 100000, ffffffff7fffce98, ffffffff7fffcf00, ffffffff7fffd288, ffffffff7fffd0b8) + 818
0000000100003a7c _start (0, 0, 0, 0, 0, 0) + 17c
导致此错误的原因是什么?
感谢您宝贵的意见,最终解决了我的问题。
问题是字符串变量的类型转换代码段
void function(const string param1, string *p2param, string *retparam) {
//function to call from bb.c has prototype
//fun2(const char **str,stubfunc)
const char *l_str = param1.c_str();
fun2((const char **) &l_str,coverage_hook);
}
//this was ealier called as
//fun2((const char**) ¶m1,coverage_hook); hence was causing the core dump
//why?? still dont know :)
如果retparam
是传入时实际string
的地址,那么在返回之前您真正想做的是
(*retparam) = f2;
设置retparam
本身的值对您没有任何好处,因为它是函数中的局部变量,更改其值不会更改父级中的任何内容。但您可以更改指向的内存,这就是这里发生的情况。
返回一个指向f2的指针,f2是一个局部变量,当函数返回时会被销毁。
我在这里有点冒险,但我认为你的问题可能是你定义了这样的函数:
void function(const string param1, string *p2param, string *retparam)
{
.
.
.
}
但你在某个地方(在头文件中?)这样声明它:
string function(const string param1, string *p2param, string *retparam);
(承诺它将具有返回类型string
而不是void
)。因此,当函数返回时,调用代码会尝试使用其返回值,当发现不是时,就会出现混乱。
(如果不是这样,而且很可能不是这样,那么我认为如果您发布完整的函数定义以及调用函数的代码会有所帮助。)
相关文章:
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 从文件中读取的数据,但发生核心转储错误
- 为什么我的代码给我一个分段/核心转储错误?
- 堆栈粉碎中止<unknown>(核心转储)错误
- 如何避免出现分段核心转储错误?
- 执行 N >= 10^7 的代码时出现分段错误(核心转储)错误
- 将中缀转换为后缀并获取分段错误核心转储错误
- C++ Sqlite3 中,执行 2 个 sql 语句 - 第 2 条语句得到分段核心转储错误
- 运行时出现内存转储错误
- 合并灰色通道时分割核心转储错误
- 动态编程中的堆芯转储错误
- C++链表核心转储错误
- 为什么我的程序在运行后给出"segmentation fault"(核心转储)错误
- 如何修复ifstream的seg错误核心转储错误
- 从函数返回时发生堆芯转储错误
- 解析变量和分段错误(核心转储)错误
- 带有动态内存核心转储错误的自定义Deck类
- c++合并两个链表分段错误和核心转储错误
- 无法解决分段故障核心转储错误
- 找不到核心转储错误C++的原因