【发布时间】:2014-11-10 03:48:35
【问题描述】:
realloc() 有问题:
int main(int argc, char* argv[])
{
int* amis;
int saisie, cpt = 1;
while(saisie != -1) {
printf("Entrer les notes -1 pour quitter :");
scanf("%d", &saisie);
if (cpt == 1) {
amis = malloc(sizeof(int));
if(amis == NULL) {
printf("amis == NULL");
exit(0);
}
}
if(saisie != -1) {
amis = realloc(amis, sizeof (int) + sizeof (amis));
if(amis == NULL) {
printf("amis == NULL cpt= %d", cpt);
exit(0);
}
amis[cpt] = saisie;
printf("size = %d, saisie = %d, tab = %d \n", cpt * sizeof(int), saisie, amis[cpt]);
cpt++;
}
}
printf("%d",1==0);
afficherTab(amis,cpt);
printf("END\n");
free(amis);
return 0;
}
当我使用sizeof(int) * cpt 而不是sizeof(amis) + sizeof(int) 时,为什么realloc() 会导致错误?
free(amis) 在这种情况下也不起作用。
【问题讨论】:
-
sizeof(amis)是sizeof(int*)。当使用sizeof(int)*cpt时,amis[cpt] = saisie;也超出范围。 -
在使用前初始化saisie。
-
指向内存块的指针不知道该块有多大。指针只知道内存地址有多大,因此
sizeof指针将始终相同(大多数情况下为 4 或 8)。您必须使用size_t变量来跟踪amis的大小
标签: c null free sizeof realloc