free():无效指针中止核心转储
首先,这是创建我的问题的函数:
#include <stdio.h>
#include <stdlib.h>
int Q(int m, int n, int *k, int **c){
int i,j,temp,**dp;
dp = malloc(n * sizeof(int *));
if (dp == NULL)
return -1;
for (i=0 ; i < n ; i++) {
*(dp+i) = malloc(m+1 * sizeof(int));
if (*(dp+i) == NULL)
return -1; }
for(i = 0; i < n; i++){
for(j=0;j<m+1;j++){
dp[i][j]=0;
}
}
for (i=0 ; i < n ; i++){
free(*(dp+i));}
free(dp);
return 0;
}
在程序结束时,我收到此错误:free(): invalid pointer aborted core dumped
但是,我无法理解为什么在我使用 free 时会发生此问题。
回答
malloc(m+1 * sizeof(int))是错的。乘法是在加法之前完成的,所以这意味着“分配m字节加sizeof(int)字节”,而不是“按预期分配”的m+1元素int。
应该是malloc((m+1) * sizeof(int))。