c-具有指针数组的动态内存分配



我正试图从网上的教程中学习C,我想出了这个简单的代码来尝试理解指针和数组的内存分配。

如果size<=2,但如果size>2,则会产生分割错误。有人能告诉我们如何正确地做这件事吗?

谢谢。


#include <stdio.h>
#include <stdlib.h>

int main () {

int i, size;
printf("Quantos registos pretende inserir? ");
scanf("%d",&size);
getc(stdin);
typedef struct {
    char nome[81];
    int idade;
    char cargo[81];
} Dados;
Dados *data[(size-1)];
data[(size-1)] = (Dados *)malloc(sizeof(Dados));

for(i=0;i<size;i++) {
    printf("nInsira os dados do funcionário: ");
    printf("nntNome: ");
    gets(data[i]->nome);
    printf("ntIdade: ");
    scanf("%d",&data[i]->idade);
    getc(stdin);
    printf("ntCargo: ");
    gets(data[i]->cargo);
    FILE *fdados;
    if(!(fdados = fopen("dados.txt","a+"))) {
         printf("Impossivel aceder ao ficheiro, verfique o erro ocorrido ...");
    }
    fprintf(fdados, "Funcionário %d:",(i+1));
    fprintf(fdados, "nntNome: %s",data[i]->nome);
    fprintf(fdados, "ntIdade: %d",data[i]->idade);
    fprintf(fdados, "ntCargo: %snn",data[i]->cargo);
    fclose(fdados);
}
free(data[(size-1)]);
fflush(stdin);
return(0);
}

你一次给自己做的事情太多了。分解问题并测试每个组件:

  1. 分析用户输入:生成有效的size_t整数或中止。检查该值是否为零或过大,或者中止。

  2. 假设您已经解析了值n。为结构的n副本分配内存:

    Dados * data = malloc(n * sizeof(Dados));
    

    最后,释放内存:

    free(data);
    
  3. 使用正确的解析和错误处理来填充每个数组成员data[i]

  4. 单独练习文件操作。

好吧,您有一个结构,并且似乎希望在一个数组中创建该结构的多个副本。所以你做的是这个

Dados *data;
data = (Dados *) malloc(sizeof(Dados) * size);

现在,数据中有Dados结构的大小。

最后一定要释放你的内存免费(数据);

删除:getc(stdin);

Dados *data[(size-1)];
data[(size-1)] = (Dados *)malloc(sizeof(Dados));// here is wrong . 
                                                  you have data[size-1]
                                             the max index you can use is size-2

for(i=0;i<size;i++) // i < size-1 , since you use data[i] in loop ,
free(data[(size-1)]); // free (data);  just free the pointer you get.

相关内容

  • 没有找到相关文章

最新更新