首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态数组的C值错误

动态数组的C值错误
EN

Stack Overflow用户
提问于 2018-06-05 06:38:39
回答 1查看 44关注 0票数 0

基本上,在这段代码中,我将内容从txt文件保存到动态数组中(在此之前,一切都很好),但是当我尝试重新分配内存和添加更多结构时,中间的一些值会出错,总是相同的值这是我用来保存到动态数组的代码

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "header.h"

int iniF(guitarra *vg,int *tamvg)
{
int ch=0, i;

FILE *g;

g = fopen("guitarras.txt", "r"); // abrir ficheiro

if(g == NULL)
{
    printf("Erro ao abrir ficheiro %s", "guitarras.txt");
}

while(!feof(g)) //check how many lines the file have
{
    ch = fgetc(g);
    if(ch == '\n')
    {
        (*tamvg)++;
    }
}

fseek(g, 0, SEEK_SET);

vg = malloc(*tamvg * sizeof(guitarra));

for(i=0; i<*tamvg; i++)
{
    fscanf(g, ("%d %f %f %d %s"), &vg[i].id, &vg[i].pdia, &vg[i].valor, &vg[i].estado, &vg[i].nome );
}

fclose(g);
return vg;
}

而这个要重新分配

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include "header.h"

 int addguit(guitarra *vg, int *tamvg)
{

int stop=0;


do
{
    vg = realloc(vg, sizeof(guitarra)); //allocating one size of struct guitarra
    printf("Id: ");
    scanf("%d", &vg[*tamvg].id);
    printf("Preco por dia: ");
    scanf("%f", &vg[*tamvg].pdia);
    printf("Valor: ");
    scanf("%f", &vg[*tamvg].valor);
    printf("Estado: ");
    scanf("%d", &vg[*tamvg].estado);
    printf("Nome: ");
    scanf("%s", &vg[*tamvg].nome);
    printf("Deseja adicionar mais guitarras ao stock? Sim[1] Nao[0]: "); //asking if wants to allocate one more
    scanf("%d", &stop);
    (*tamvg)++;
}
while(stop==1);

return vg;
}

值很简单:“1111a”;“2222b”,以此类推。

这是我所说的内容的打印屏幕

ptrscr of the problem

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 06:59:56

调用realloc不会将一个结构的大小添加到数组中。相反,它将其大小调整为单个结构的大小(参见reference for realloc)。数组其余部分的内存不再保留,可由其他程序认领/修改。假设tamvg指向数组的当前长度,您应该具有类似于以下内容的内容:

代码语言:javascript
复制
vg = realloc(vg, sizeof(guitarra)*(*tamvg+1));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档