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
的末尾。
我正在尝试从一个函数中 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
的末尾。