我有一个函数,它返回指向结构数组的指针。然而,当我试图访问返回结构的任何值时,它打印随机符号。
#include <stdio.h>
struct MY {
int i;
char string[30];
};
struct MY* myFunc() {
struct MY arrayOfStructs[3];
struct MY tempStruct;
struct MY* arrayOfStructsPtr = arrayOfStructs;
tempStruct.i = 1;
tempStruct.string[0] = 'H';
tempStruct.string[1] = 'i';
arrayOfStructs[0] = tempStruct;
tempStruct.i = 2;
tempStruct.string[0] = 'L';
tempStruct.string[1] = 'o';
arrayOfStructs[1] = tempStruct;
tempStruct.i = 3;
tempStruct.string[0] = 'M';
tempStruct.string[1] = 'Y';
arrayOfStructs[2] = tempStruct;
return arrayOfStructsPtr;
}
int main()
{
struct MY* arrayOfStructs = myFunc();
for(int i = 0; i < 3; i++) printf("%d\n", arrayOfStructs[i].i);
return 0;
}
2条答案
按热度按时间mlmc2os51#
你返回了一个对局部数组的引用,当函数返回时,这个数组就不再存在了。这是未定义的行为。
您需要:
或
或者传递由调用者分配的缓冲区。
如果动态分配内存,则应在使用后对其进行
free
z2acfund2#
当函数返回时,返回一个指向超出作用域的局部变量的指针。
1.调用方
main()
分配变量并将其传递给myFunc()
进行初始化。在这里,你并不需要存储
i
,因为它只是struct + 1的索引。myFunc()
动态分配malloc()
的变量并返回指针。调用者负责释放分配的内存。myFunc()
:使变量成为静态(不推荐)。