Violação no acesso de memória para escrita

Boa noite, pessoal.

Estou com um projeto para implementar quatro tipos de tabela hash: encadeamento interno, encadeamento externo, tentativas lineares e hashing duplo.

Estou agora fazendo a parte do encadeamento externo, mas estou com um erro que não consigo solucionar. Caso alguém possa me ajudar, segue o código abaixo:

> void inserirHashExterno(Hash tabela, string valor) {
> 	int chave = divisao_inteira(valor);	// Chave hash
> 	Dados *aux = tabela[chave];		// Posição na tabela de acordo com a chave
> 	while (aux != NULL || aux->info != valor) {	// Posição na tabela é vazia OU se o valor que será inserido é igual
> 		aux = aux->prox;			// Percorre a tabela
> 	}
> 	if (aux == NULL) {
> 		aux = (Dados*)malloc(sizeof(Dados));	// Aloca uma posição na memória para aux
> 		aux->info = valor;	// Atribui valor em aux->info (string) -> ERRO AQUI (Access violation writing location)
> 		aux->prox = tabela[chave];    // Atribui a próxima posição da tabela para o próximo item da lista
> 		tabela[chave] = aux;		// A posição da tabela onde foi inserido o valor, recebe o ponteiro da lista.
> 	}
> }

aux foi alocado? aux->info é capaz de armazenar uma string(? nem sabia que c++ tinha este tipo)

Blz mas qual é o erro?

O erro tá no código como comentário… Acesso indevido de memória.

Mas tudo bem, consegui fazer o projeto utilizando C. Valeu!

Aux foi alocado e aux->info é um String.

De qualquer forma eu consegui terminar o projeto usando C, ao invés de C++.

Valeu!!

Objetos C++ tem de ser alocados e construídos (na heap) usando new. Só pode usar malloc() com PODs

O erro está em usar malloc() com objetos que precisam ter seus construtores chamados como é o caso da instância de string do campo da classe Dados.

1 curtida