【发布时间】:2013-08-13 21:41:32
【问题描述】:
我正在尝试从网络上的教程中学习 C,我想出了这个简单的代码来尝试了解指针和数组的内存分配。
如果size 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("\n\n\tNome: ");
gets(data[i]->nome);
printf("\n\tIdade: ");
scanf("%d",&data[i]->idade);
getc(stdin);
printf("\n\tCargo: ");
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, "\n\n\tNome: %s",data[i]->nome);
fprintf(fdados, "\n\tIdade: %d",data[i]->idade);
fprintf(fdados, "\n\tCargo: %s\n\n",data[i]->cargo);
fclose(fdados);
}
free(data[(size-1)]);
fflush(stdin);
return(0);
}
【问题讨论】:
-
请不要使用“完美无瑕”这个词。唯一的意思是你不知道你在做什么。您的代码并非完美无缺,但对于 any 值为
size, sincedata[size - 1]` 的可怕车祸总是 越界错误,因为数组总是短一个元素。 -
(这甚至没有考虑到可变长度数组必须具有严格的正大小,并且
size是有符号的并且很可能是负数,并且您没有为大部分数组元素。) -
你说得对,选词不当。感谢您的宝贵时间!