il me montre une erreur sur le libre Erreur dans` ./program.o': double gratuit ou la corruption (out): 0x0000000002316030 ce que je peux faire avec le code, ce que je fais mal avec le libre? Merci.J'ai un problème avec free: Erreur dans `./program.o ': double gratuit ou corruption (out): 0x0000000002316030
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void setInOrderArr(int *arrArr[], int len);
void printArrays(int *arrArr[], int len);
void setInOrderAll(int *arrArr[], int len);
int main(void)
{
int rows = 0;
int length = 0;
int i = 0;
int j = 0;
printf("Enter number of rows: ");
scanf("%d", &rows);
int ** arrArr = (int**)malloc(sizeof(int)*rows);
for (i = 0; i < rows; i++)
{
printf("Enter array length for row %d: ",i);
scanf("%d", &length);
arrArr[i] = malloc(sizeof(int)* (length + 1));
arrArr[i][0] = length;
for (j = 0; j < length; j++)
{
printf("Enter value for array: ");
scanf("%d",&arrArr[i][j+1]);
}
}
printArrays(arrArr, rows);
setInOrderArr(arrArr, rows);
printArrays(arrArr, rows);
setInOrderAll(arrArr, rows);
printArrays(arrArr, rows);
for (i = 0; i < rows; i++)
{
free(arrArr[i]);
}
free(**arrArr);
return 0;
}
void setInOrderArr(int *arrArr[], int len)
{
int i = 0;
int j = 0;
int k = 0;
int temp = 0;
int temp2 = 0;
for (i = 0; i < len; i++)
{
for (j = 1; j < arrArr[i][0]; j++)
{
for (k = 1; k < arrArr[i][0]; k++)
{
temp = arrArr[i][k];
if (arrArr[i][j + 1] < temp)
{
temp2 = arrArr[i][j + 1];
arrArr[i][j + 1] = temp;
arrArr[i][k] = temp2;
}
}
}
}
}
void printArrays(int *arrArr[], int len)
{
int i = 0;
int j = 0;
static int times = 0;
if (times == 0)
{
printf("Printing:\n");
}
else if (times == 1)
{
printf("Sorted rows:\n");
}
else if (times == 2)
{
printf("Ordered array:\n");
}
for (i = 0; i < len; i++)
{
for (j = 1; j <= arrArr[i][0]; j++)
{
printf("%d ", arrArr[i][j]);
}
printf("\n");
}
times++;
}
void setInOrderAll(int *arrArr[], int len)
{
int i = 0;
int j = 0;
int** arrTmp = { 0 };
for (i = 0; i < len; i++)
{
for (j = 0; i < len - 1 - j; j++)
{
if (arrArr[j][0] > arrArr[j + 1][0])
{
arrTmp = arrArr[j];
arrArr[j] = arrArr[j + 1];
arrArr[j + 1] = arrTmp;
}
}
}
}
il me montre une erreur sur le sans erreur dans `./program.o ': à double libre ou la corruption (out): 0x0000000002316030 ce que je peux faire avec le code, ce que je fais mal avec le gratuit? Merci.
'free (** arrArr);' -> 'free (arrArr);' – StoryTeller
Jetez un coup d'œil à cet appel initial 'malloc'. Que pensez-vous qu'il se passe si sizeof (int)! = Sizeof (int *) '(ce qui est très probable sur un système 64 bits)? –
Faites le 2ème 'free()' comme vous le faites pour le 1er. Transmettez ce qui a été renvoyé par la fonction d'allocation ('malloc()' ici). Ici 'int ** arrArr = ...' le '**' fait partie du type de la variable. Cela ne fait pas partie de son nom. – alk