Pergunta sobre stl, stdvector, c++, vector, declaration – Inicialização vetorial em C ++

1

Eu estou usando vetores no meu código.

A linha que está causando o erro é a seguinte:

<code>vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }
</code>

A linha :

<code> alt_seq.push_back(temp_node);
</code>

causa um erro de execução. No entanto, se eu inicializar o Vector com algum tamanho inicial da seguinte forma:

<code>vector<Node> alt_seq(1000) ;
</code>

Neste caso, o código funciona bem. No entanto, não desejo fornecer um tamanho inicial, pois o número de objetos no vetor será variável no tempo de execução. Por favor me ajude. Eu sou novo com C ++.

Para sua referência, a função completa do Método está aqui:

http://pastebin.com/2dUFEui5

pastebin.com/zDbJikK7 Este é o link para node.h e node.cpp Abhinav Arora
@dirkgently Link para node.h e node.cpppastebin.com/zDbJikK7 Abhinav Arora
BTW, o link pastebin não tem a definição para classeNode ou. dirkgently
edite sua pergunta para incluir o código de requisição, não nos dê links para o pastebin que eventualmente irá vincular Sam Miller

Sua resposta

2   a resposta
0

Eu posso ver um problema; quando você declara 1000vector objetos e, em seguida, fazer umpush_back você está adicionando ao final do vetor, ou seja, os objetos que você está tentando adicionar estão em 1001, 1002 .... etc. Se declarar 1000vector objetos não fornecem um erro de tempo de execução, eu veria primeiro qual é a definição padrão (já que os primeiros 1000 objetos do nó possuem valores padrão), já que isso não é erro e é comparado com os dados reais que estou tentando carregar. Espero que isto ajude.

3

SeuNode classe tem um membro de ponteiro do tipoCombinedFragment* chamadocfrag. Isso cria referências pendentes se você não definiu seus próprios operadores de cópia e atribuição de cópia. Além disso, um dtor adequado é necessário para evitar vazamentos seNode é responsável por alocar / desalocarcfrag. Se você não quiser copiar profundamenteCombinedFragment você pode usar umshared_ptr.

Além disso, o ctor padrão paraNode provavelmente nem precisa estar lá (saicfrag para um estado não inicializado).

this->cfrag = frag; parece suspeito para mim. Quando você copia, você está fazendo alguns ponteiros apontando para o mesmoCombinedFragment objeto. Agora, se um deles for excluído, o outro se tornará um ponteiro pendente. Qualquer acesso a essecfrag objeto é UB. Então, em vez de um ponteiro bruto, tente usar umshared_ptr<CombinedFragment> como membro, para que, mesmo após a exclusão deNode objete você não perde oCombinedFragment objeto compartilhado com outro ao vivoNode objetos. HTH. dirkgently
Obrigado eu vou tentar isso ... Se você quiser olhar outras classes no projeto, o código pode ser encontrado no GitHubgithub.com/abhinavarora/mbt Abhinav Arora
Como você disse eu adicionei os três grandes da seguinte formapastebin.com/g2n14awz  Por favor, deixe-me saber se esta adição está correta. Apesar de fazer as alterações acima, ainda dá um erro de tempo de execução. Por favor ajude. Eu não estou entendendo meu erro. Abhinav Arora
@AbhinavArora: Tente adicionar os três grandes e voltar se isso não resolver o seu problema! dirkgently

Perguntas relacionadas