Seg Fault(Whats Wrong,strcpy)

时间:2011-03-05 03:24:58

标签: c++

在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);

3 个答案:

答案 0 :(得分:8)

isbnStr是一个字符串数组(或更具体地说是字符指针),而不是字符数组。我认为你打算做char isbnStr[11];

答案 1 :(得分:0)

您是否正在做任何事情来初始化isbnStr?如果没有,它可能是一个无效的指针,可能导致程序崩溃。

答案 2 :(得分:0)

您正尝试将strchar*)的字符串复制到isbnStr[0]char*),但isbnStr是有效的11 char*的数组,那些char*未初始化并指向垃圾地址。通过isbnStr[0]isbnStr[10]分配内存。

注意:我假设你意味着让isbnStr成为一个11 char*的数组,无论出于何种原因。如果您希望isbnStr是一个包含11个字符的数组,请将其声明为char isbnStr[11],并且不要在isbnStr中取消引用sprintf