- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
I get the following error when running a c program: * Error in `./final': double free or corruption (!prev): 0x0000000000c2f010 *
I believe this is due to free() being called at the end of the program, but I can't figure out where the malloc'd memory is being freed prior to this. Here is the code:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include <time.h>
#include <stdlib.h>
static int DIM = 1000; // Golbal variable for Matrices Dimentions
int isPrime(unsigned int number);
int countPrimes(int **matrix);
int main() {
time_t tic = clock();
int **matrixA;//
int **matrixB;
int **mult;
int k = 0, sum=0;
time_t t;
int i =0,j;
// Allocate dynamic memory for Matrices A,B && mult first (rows) dimension
matrixA = (int **) malloc (DIM * sizeof (int *));
matrixB = (int **) malloc (DIM * sizeof (int *));
mult = (int **) malloc (DIM * sizeof (int *));
// Allocate dynamic memory for Matrices A,B && mult second (rows) dimension, && Initialize elements to "0" For Matrices B && Mult
for (k = 0; k < DIM; k++) {
matrixA[k] = (int *) calloc (DIM, sizeof (int *));
matrixB[k] = (int *) calloc (DIM, sizeof (int *));
mult[k] = (int *) calloc (DIM, sizeof (int *));
}
// Generate random numbers for matrix A elements
for (i = 0; i < DIM; i++)
{
for (j = 0; j < DIM; j++)
{
matrixA[i][j] = (rand() % 100)+1 ;
printf("%d ",matrixA[i][j]);
}
}
// Do the matrix multiplication
for (i = 0; i < DIM; i++) {
for (j = 0; j < DIM; j++) {
for (k = 0; k < j; k++) {
sum += matrixA[i][k] * matrixB[k][j];
}
mult[i][j] = sum;
sum = 0;
}
}
int total = countPrimes(matrixA);
printf("\n\nnumber of primes in a : %d\n\n", total);
// Delete the dynamic memory of Matrix A
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixA+i));
}
free(matrixA);
// Delete the dynamic memory of Matrix B
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixB+i));
}
free(matrixA);
// Delete the dynamic memory of Matrix B
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixB+i));
}
free(matrixA);
// Compute SpeedUp
time_t toc = clock();
double time = (double) (toc - tic) / CLOCKS_PER_SEC;
printf("The amount of time the OS has spent running your process is : %lf seconds\n\n\n", time);
return 0;
}
// Check elements of Matrix A if its a Prime number or not
int isPrime(unsigned int number) { // Psitive numbers could be Prime numbers only
if (number <= 1) return 0; // zero and one are not prime
unsigned int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return 0;
}
return 1;
}
// Count number of prime numbers in Matrix A
int countPrimes(int **matrix) {
int row, col;
int flag = 0;
int total = 0;
for (row = 0; row < DIM; row++) {
for (col = 0; col < DIM; col++) {
flag = isPrime(matrix[row][col]);
if(flag == 1)
total++;
}
}
return total;
}
最佳答案
您的错误在这里:
// Delete the dynamic memory of Matrix A
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixA+i));
}
free(matrixA);
// Delete the dynamic memory of Matrix B
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixB+i));
}
free(matrixA);
// Delete the dynamic memory of Matrix B
for (i = 0; i < DIM; i++) { // free first matrix
free(*(matrixB+i));
}
free(matrixA);
请注意,您free(matrixA)
三次,即使您打算释放matrixB 和matrixC。您还错误地在两个不同的循环中使用了free(*(matrixB+i));
。
关于c - 双重释放或腐败(!prev),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349329/
一个特定文档不会更新,而同一查询会更新我查询的任何其他 _id: Category.findOneAndUpdate( {_id : req.params.id}, {parent :
我正在使用 ifstream 读取文件头。编辑:我被要求放置完整的最小程序,所以就在这里。 #include #include using namespace std; #pragma pack(
typedef struct { int *info; } row; struct { row* head; int len; int size; } list; in
在索引 block 时我在 debug.log 中有错误: 2016-11-14 15:14:52 UpdateTip: new best=000000000000038ad111e773453f17
我是一名优秀的程序员,十分优秀!