return 在 C 中的结构中动态分配二维数组

return dynamically allocated 2D array in struct in C

我正在尝试从一个函数中 return 一个动态分配的二维数组,没有错误或警告,但最后打印时数字是错误的。如果有人能告诉我我在哪里搞砸了,我肯定这是显而易见的。

这是代码的简化版本:

#include <stdio.h>
#include <stdlib.h>

int rows = 2, cols=2 ;

struct Data
{
    int longtitude;
};

struct Data* WritingData()
{
    struct Data *arr = (struct Data*)malloc(rows* cols* sizeof(struct Data));

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
         scanf("%d",&(arr + i*cols+ j)->longtitude);
    
    free(arr);
    return(arr);
}

int main()
{
    struct Data *arr = WritingData();

    for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++)
    {
    printf(" %d ", (arr + i*cols+ j)->longtitude);
    }
    printf("\n");
    }
}

您为数组分配内存并填充它,但随后在从函数返回指针之前释放了内存。

一旦分配的内存被释放,它就无法再访问。尝试访问已释放的内存会触发 undefined behavior.

在使用完 free 之前不要调用它,在本例中是在 main 的末尾。