我在使用 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));
這是其余的代碼:
主程式
#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;
}
函式.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);
#endif
函式.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));
^
謝謝 !
uj5u.com熱心網友回復:
第一個引數realloc是一個指標。 Tab被宣告為 an int *,所以這意味著*Tabis anint這就是它與引數型別不匹配的原因。這也意味著回傳型別與您分配的型別不匹配。
所以傳遞指標而不是它指向的東西。
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://www.uj5u.com/qukuanlian/483992.html
上一篇:C中的未知函式簽名
下一篇:指標陣列的動態分配/釋放
