cebro Posted December 30, 2022 at 10:56 AM Report Share #629267 Posted December 30, 2022 at 10:56 AM Boas malta, Estou com uma dificuldade em adicionar uma estrutura a um vetor (estrutura) através do memcpy e não estou a perceber o porquê. As estruturas estão definidas no vecloc.h bem como as funções e suas implementações num ficheiro .c, mas coloquei aqui para uma simplificação visual. Talvez não esteja a perceber bem como aceder a diferentes estruturas através do vector vecloc->data, alguém me consegue dar alguma sugestão ou conteúdo ou mesmo explicar-me esta parte? Desde já agradeço qualquer ajuda! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "vecloc.h" /* typedef struct{ int fileIdx; int line; long offset; } Location; typedef struct{ int space; int count; Location *data; } VecLoc; * */ VecLoc *vlCreate( void ) { VecLoc* v = malloc(sizeof(VecLoc)); if(v == NULL) return NULL; v->data = malloc(sizeof(Location)); if(v->data == NULL) { free(v); return NULL; } v->space = 1; v->count = 0; v->data = NULL; return v; } Location* vector_get_dataPos(VecLoc* v, int pos) { if(pos > v->count) return NULL; return v->data + pos * sizeof(Location); } int vlAdd( VecLoc *vec, Location *loc ) { if(vector_has_space(vec) == false) { vec->data = realloc(vec->data, (vec->space + VECTOR_INCREMENT_DATA) * sizeof(Location)); if(vec->data == NULL) return 0; vec->space += VECTOR_INCREMENT_DATA; printf("Vector Count is now %d\n", vec->count); } int newDataPos = vec->count ; Location* newData = vector_get_dataPos(vec, newDataPos); memcpy(newData, loc, sizeof(Location)); vec->count++; return 1; } int main() { Location locToCopy; locToCopy.fileIdx = 1; locToCopy.line = 2; locToCopy.offset = 0; Location* locPtr = &locToCopy; //VecLoc *vlCreate( void ); VecLoc* ptrVec = vlCreate(); int x = vlAdd(ptrVec, locPtr); if(x) { printf("Vetor Space = %d\n", ptrVec->space); printf("Vetor Count = %d\n", ptrVec->count); printf("Vetor Location fileIDX = %d\n", ptrVec->data->fileIdx); printf("Vetor Location line = %d\n", ptrVec->data->line); printf("Vetor Location offset = %d\n",(int) ptrVec->data->offset); } return 0; } Link to comment Share on other sites More sharing options...
cebro Posted December 30, 2022 at 12:56 PM Author Report Share #629274 Posted December 30, 2022 at 12:56 PM Problema resolvido. Ao criar o Vetor, apesar de alocar memoria para a estrutura Location, estava a colocar a null esse endereço logo de seguida. Peço desculpa pela criação talvez desnecessária do tópico, se puderem fechem/apaguem. Cumprimentos Link to comment Share on other sites More sharing options...
thoga31 Posted December 30, 2022 at 02:57 PM Report Share #629282 Posted December 30, 2022 at 02:57 PM Em 30/12/2022 às 12:56, cebro disse: Peço desculpa pela criação talvez desnecessária do tópico, se puderem fechem/apaguem. Não tens de pedir desculpa, tinhas uma dúvida e vieste pedir ajuda, é para isso que cá estamos. Os tópicos no P@P não são encerrados a não ser que violem as Regras do Fórum. Uma vez que nenhuma regra foi infringida, o tópico manter-se-á público. Qualquer dúvida que venhas a ter, dispõe, estamos cá para isso 😉 Cumprimentos. Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now