c - 在 C 中释放双指针

标签 c arrays pointers free double-pointer

我有两个创建数组的函数。

double *Array1D (int nx, int dsize) {
  double *v;
  v = calloc(nx, dsize);
  return v;
}

double **Array2D (int ny, int nx, int dsize) {
  double **v; int j;
  for (j = 0; j < ny; j++)
    v[j] = Array1D(nx, dsize);
  return v;
}

int i, j;
pn = Array2D (ny, nx, sizeof(double));
for (j = 0; j < ny; j++)
  for (i = 0; i < nx; i++)
    pn[j][i] = 1.0 + (i + j * nx) * 1.0;

for (i = 0; i < ny; i++)
  free(pn[i]);
free(pn);

数组元素正确初始化,但释放它们会产生段错误。

错误:

*** glibc detected *** ./array_test: free(): invalid pointer: 0x00007fff00d42a4f ***
Segmentation fault (core dumped)

最佳答案

double **Array2D (int ny, int nx, int dsize)
{
  double **v; int j;
  for (j=0; j<ny; j++) v[j] = Array1D(nx, dsize);

v 对象永远不会在您的函数中初始化。

关于c - 在 C 中释放双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744721/

相关文章:

c - 如何在 c 中将链表中的所有字符串大写?

不带参数在函数内部调用函数

c - 错误 C2016 : C requires that a struct or union has at least one member from struct

javascript - 从对象数组创建单个对象 - JS/ES6

java - 什么时候不使用 java8 流?

c - C中的char数组和char指针有什么区别?

c - 如何使用 scanf 函数获取具有 50 或更多数字的大输入

java - 如何让这个算法变得懒惰呢? ( java )

c - 了解 C 中的打印值

检查以下字符串指针数组中的元音?