C 释放矩阵时出现分段错误
我正在使用代码::块 在Dealoc_mat中2-3次迭代后释放矩阵时,代码发送seg故障C 释放矩阵时出现分段错误,c,C,我正在使用代码::块 在Dealoc_mat中2-3次迭代后释放矩阵时,代码发送seg故障 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int **_mat; int _lines, _columns; void alloc_mat(); void dealloc_mat(); int main(int argc, char
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int **_mat;
int _lines, _columns;
void alloc_mat();
void dealloc_mat();
int main(int argc, char *argv[])
{
_lines = 31, _columns = 22;
alloc_mat();
dealloc_mat();
return 0;
}
void alloc_mat()
{
int i, row, col;
_mat = malloc(sizeof(int *) * _lines);
for(i = 0 ; i < _lines ; i++)
{
int *tmpMatrix = malloc(sizeof(int) * _columns);
_mat[i] = &tmpMatrix[i];
}
for(row = 0 ; row < _lines ; row++)
{
for(col = 0 ; col < _columns ; col++)
{
_mat[row][col] = 0;
}
}
}
void dealloc_mat()
{
int row;
for(row = 0; row < _lines; row++)
{
free(_mat[row]);
}
free(_mat);
}
#包括
#包括
#包括
#包括
国际**;
整数行、整数列;
void alloc_mat();
void dealoc_mat();
int main(int argc,char*argv[])
{
_行=31,列=22;
alloc_mat();
dealoc_mat();
返回0;
}
void alloc_mat()
{
int i,行,列;
_mat=malloc(sizeof(int*)*行);
对于(i=0;i<\u行;i++)
{
int*tmpMatrix=malloc(sizeof(int)*\u列);
_mat[i]=&tmpMatrix[i];
}
对于(行=0;行<_行;行++)
{
用于(列=0;列<_列;列++)
{
_mat[行][col]=0;
}
}
}
void dealoc_mat()
{
int行;
对于(行=0;行<_行;行++)
{
自由(_mat[行]);
}
免费(_-mat);
}
这里有两个函数,用于为字符串、字符串数组分配内存。实际上,您可以根据自己的需要轻松修改它们:
char **strings; // created with global scope (before main())
void allocMemory(int numStrings, int max)
{
int i;
strings = malloc(sizeof(char*)*(numStrings+1));
for(i=0;i<numStrings; i++)
strings[i] = malloc(sizeof(char)*max + 1);
}
void freeMemory(int numStrings)
{
int i;
for(i=0;i<numStrings; i++)
if(strings[i]) free(strings[i]);
free(strings);
}
以下是错误:
_mat[i] = &tmpMatrix[i];
应该是
_mat[i] = &tmpMatrix[0];
或者更好
_mat[i] = tmpMatrix;
问题是您没有正确分配它。这:
for(i = 0 ; i < _lines ; i++)
{
int *tmpMatrix = malloc(sizeof(int) * _columns);
_mat[i] = &tmpMatrix[i];
}
for(i=0;i<\u行;i++)
{
int*tmpMatrix=malloc(sizeof(int)*\u列);
_mat[i]=&tmpMatrix[i];
}
应该是这样的:
for(i = 0 ; i < _lines ; i++)
{
_mat[i] = malloc(sizeof(int) * _columns);
}
for(i=0;i<\u行;i++)
{
_mat[i]=malloc(sizeof(int)*\u列);
}
此外,
\u mat
,\u行
和\u列
是C语言中的保留标识符,您不应该使用它们。在普通(即\u-mat
名称空间)或标记(即struct\u-mat
)名称空间中,以下划线开头的任何标识符都是保留的 TMP矩阵在哪里定义?此代码不应编译或编辑。复制了错误的样本。保留对\u的评论+1
for(i = 0 ; i < _lines ; i++)
{
_mat[i] = malloc(sizeof(int) * _columns);
}