在GDB中我得到:
(gdb) backtrace 0 0xb7d91544 in strcpy () from /lib/libc.so.6 1 0x08048982 in ISBN::ISBN(char const*, ISBNPrefix&) () 2 0x08048d4a in main () (gdb)
从这段代码:
ISBN::ISBN(const char* str, ISBNPrefix& list) {
if(isValid(str)) {
isSet = true;
sprintf(*isbnStr,"%s",str);
}
}
究竟是什么导致了这个?
isbnStr在标题中创建:
class ISBN
{
...
char* isbnStr[11];
...
关于我在这里做什么导致这个段错误的任何想法?
主要的电话是:
ISBN* isbn = new ISBN("7999999008",*prefix);
答案 0 :(得分:8)
isbnStr是一个字符串数组(或更具体地说是字符指针),而不是字符数组。我认为你打算做char isbnStr[11];
答案 1 :(得分:0)
您是否正在做任何事情来初始化isbnStr
?如果没有,它可能是一个无效的指针,可能导致程序崩溃。
答案 2 :(得分:0)
您正尝试将str
(char*
)的字符串复制到isbnStr[0]
(char*
),但isbnStr
是有效的11 char*
的数组,那些char*
未初始化并指向垃圾地址。通过isbnStr[0]
为isbnStr[10]
分配内存。
注意:我假设你做意味着让isbnStr成为一个11 char*
的数组,无论出于何种原因。如果您希望isbnStr
是一个包含11个字符的数组,请将其声明为char isbnStr[11]
,并且不要在isbnStr
中取消引用sprintf
。