它顯示我有關`./program.o'中的免費 錯誤的錯誤:double free或腐敗(出):0x0000000002316030 我該怎麼辦的代碼,我在做什麼錯了免費?謝謝。我有一個免費的問題:`./program.o'中的錯誤:雙重釋放或損壞(輸出):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;
}
}
}
}
它顯示了我一個錯誤關於`./program.o'自由 錯誤:雙重釋放或腐敗(出):0x0000000002316030 什麼我可以做的代碼,我在做什麼毛病免費?謝謝。
'free(** arrArr);' - >'free(arrArr);' – StoryTeller
看看最初的'malloc'調用。如果'sizeof(int)!= sizeof(int *)'(這很可能在64位系統上)會發生什麼? –
爲第二個'free()'做和第一個一樣的工作。傳入分配函數('malloc()')返回的內容。這裏'int ** arrArr = ...''**'是變量類型的一部分。它不是它名字的一部分。 – alk