我使用realloc有一个问题。我无法实现一系列int。
既然realloc已经修复,我唯一的问题就是我无法触发for。现在是这样的:
int insereAIndice(int* Tab, int index, int insertion, int taille) {
Tab = realloc(Tab, taille * sizeof (*Tab));
int i;
for (i = taille-1; i <= index+1 ; i--) {
printf("%d", Tab[i]);
Tab[i] = Tab[i-1];
}
return *Tab;
}以下是“重要”一行:
*Tab = realloc(*Tab, taille * sizeof (*Tab));下面是代码的其余部分:
Main.c
#include "functions.h"
#include "functions.c"
/* TP 3 - ESIEE-IT Rémy JARDIN */
int main() {
int saisie, index, insertion, taille;
// Création du tableau avec des valeurs aléatoires.
printf("Creation du Tableau. \nNombre de caractere du tableau : ");
scanf("%d", &saisie);
int *Tab = ArrayCreate(saisie);
printf("Voici le tableau nouvellement creer : \n");
Affichage(Tab, saisie);
// Insertion d'une valeur 'insertion' à l'index 'index'. Avec décallage.
taille = saisie;
printf("\n ! Mode Insertion ! \nNouvel Endroit souhaiter a partir de 0 : ");
scanf("%d", &index);
printf("Nouvelle valeur souhaiter : ");
scanf("%d", &insertion);
insereAIndice(Tab, index, insertion, taille);
Affichage(Tab, saisie);
free(Tab);
return 0;
}functions.h
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <stdio.h>
#include <stdlib.h>
int *ArrayCreate(int saisie);
int randomizer(void);
int insereAIndice(int* Tab, int index, int insertion, int taille);
int Affichage(int* Tab, int max);
#endiffunctions.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
int *ArrayCreate(int saisie) {
int i;
int *Tab = malloc( saisie * sizeof (*Tab));
if (Tab==NULL) {
printf("Not enough Memory");
exit (1);
}
for (i = 0; i < saisie; i++) {
Tab[i] = randomizer();
}
return Tab;
}
int randomizer() {
return 1 + rand() % 100;
}
int insereAIndice(int* Tab, int index, int insertion, int taille) {
*Tab = realloc(*Tab, taille * sizeof (*Tab));
int i;
for (i = taille; i < index ; i--) {
printf("\n - %d", Tab[i]);
}
return *Tab;
}
int Affichage(int* Tab, int max) {
// Affichage
int i;
printf("\n Resultats : ");
for (i = 0; i < max; i++) {
printf("%d - ", Tab[i]);
}
return *Tab;
}这就是GCC给我的:
functions.c: In function 'insereAIndice':
functions.c:26:20: warning: passing argument 1 of 'realloc' makes pointer from integer without a cast [-Wint-conversion]
*Tab = realloc(*Tab, taille * sizeof (*Tab));
^
In file included from functions.h:5:0,
from main.c:1:
f:\logiciel\mingw\include\stdlib.h:486:40: note: expected 'void *' but argument is of type 'int'
_CRTIMP __cdecl __MINGW_NOTHROW void *realloc (void *, size_t);
^~~~~~~
In file included from main.c:2:0:
functions.c:26:10: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
*Tab = realloc(*Tab, taille * sizeof (*Tab));
^谢谢!
发布于 2022-05-28 14:55:54
realloc的第一个参数是指针。Tab被声明为int *,因此这意味着*Tab是一个int,这就是为什么它不匹配参数的类型。这也意味着返回类型与您要分配给它的内容不匹配。
因此,传递指针,而不是它所指向的。
Tab = realloc(Tab, taille * sizeof (*Tab));但在以下几行中,另一个问题变得明显起来:
for (i = taille; i < index ; i--) {
printf("\n - %d", Tab[i]);
}数组的大小已经调整为有taille元素,因此这个循环读取超过分配内存的结束。您可能希望这样做,而不是用于分配:
Tab = realloc(Tab, index * sizeof (*Tab));因此,您不再读取过去分配的内存(假设数组被调整为更大的大小),但是现在您正在读取未初始化的值。
https://stackoverflow.com/questions/72416647
复制相似问题