我正在传递一个指向函数的指针,我想初始化被调用函数中的结构数组,并想使用该数组的主函数。但是我无法在main函数中得到它。下面是我的代码:
typedef struct _testStruct
{
int a;
int b;
} testStruct;
void allocate(testStruct** t)
{
int nCount = 0;
int i = 0;
printf("allocate 1n");
t = (testStruct**)malloc(10 * sizeof(testStruct));
for(i = 0; i < 10; i++)
{
t[i] = (testStruct *) malloc( 10 * sizeof(testStruct));
}
for(nCount = 0 ; nCount < 10; nCount++)
{
t[nCount]->a = nCount;
t[nCount]->b = nCount + 1;
printf( "A === %dn", t[nCount]->a);
}
}
int main()
{
int nCount = 0;
testStruct * test = NULL;
int n = 0;
allocate(&test);
for(nCount = 0 ; nCount < 10; nCount++ )
{
if (test == NULL)
{
printf( "Not Allocatedn");
exit(0);
}
//printf("a = %dn",test[nCount]->a);
/*printf("a = %dn",test->a);
printf("b = %dn",test->b); */
}
return 0;
}
请注意,我必须传递双指针的功能,因为它是必需的。谢谢你的帮助。
#include <stdio.h>
#include <stdlib.h>
typedef struct _testStruct
{
int a;
int b;
} testStruct;
void allocate(testStruct** t)
{
int nCount = 0;
printf("allocate 1n");
testStruct *newT = (testStruct*)malloc(10 * sizeof(testStruct));
for(nCount = 0 ; nCount < 10; nCount++)
{
newT[nCount].a = nCount;
newT[nCount].b = nCount + 1;
printf( "A === %dn", newT[nCount].a);
}
*t = newT;
}
int main()
{
int nCount = 0;
testStruct * test = NULL;
allocate(&test);
for(nCount = 0 ; nCount < 10; nCount++ )
{
printf("a = %dn",test[nCount].a);
printf("a = %dn",test[nCount].b);
}
return 0;
}
。
t = (testStruct**)malloc(10 * sizeof(testStruct));
分配给t
,而不是test
。也许你需要
*t = (testStruct*)malloc(10 * sizeof(testStruct));
?我不确定,周围有这么多指针,我容易迷路。无论如何,您似乎没有将任何内容分配到传递给函数的指针中。
你说你想创建一个结构数组,但是你的allocate
函数创建了一个更像二维数组的数据结构。此外,您不会以任何有意义的方式将该结构返回给调用者。我想你已经对指针,malloc()
和你所做的所有间接的事情感到困惑了。请查看@Ed Heal的更正版节目。