无法在C中返回多维数组
我试图用C编写一个函数,它返回指向数组的指针。这个数组的每个元素都是指向初始化结构的指针,在每个结构中也有指向数组的指针无法在C中返回多维数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我试图用C编写一个函数,它返回指向数组的指针。这个数组的每个元素都是指向初始化结构的指针,在每个结构中也有指向数组的指针 struct queueRecord; typedef struct queueRecord* queue; queue createQueue(int maxSize){ queue newQueue = malloc(sizeof(struct queueRecord)); newQueue->array = malloc(sizeof(int)*
struct queueRecord;
typedef struct queueRecord* queue;
queue createQueue(int maxSize){
queue newQueue = malloc(sizeof(struct queueRecord));
newQueue->array = malloc(sizeof(int)*maxSize);
newQueue->capacity=maxSize;
newQueue->front=0;
newQueue->rear=0;
return newQueue;
}
这与以下功能一样适用:
queue* initQArr(int maxSize){
queue arr[10];
for (int i=0; i<10; i++) {
arr[i]=createQueue(maxSize);
}
return arr;
}
queue *digitsQArr = initQArr(length);
int digit = 0;
然而!当我调用这个函数并返回到一个新数组时,我得到了一个只有5个元素的数组:
queue* initQArr(int maxSize){
queue arr[10];
for (int i=0; i<10; i++) {
arr[i]=createQueue(maxSize);
}
return arr;
}
queue *digitsQArr = initQArr(length);
int digit = 0;
(调试信息如下所示):
在
initQArr
中,返回局部变量arr
的地址:
queue* initQArr(int maxSize){
queue arr[10];
for (int i=0; i<10; i++) {
arr[i]=createQueue(maxSize);
}
return arr;
}
返回后,指针
arr
仍然有效,因为它指向堆上的内存。您应该在使用后释放这样的内存,就像createQueue
中分配的队列指针一样,当函数initQArr完成执行时,您返回的数组超出了范围。您必须动态地将内存分配给“arr”并返回它。如果您想知道为什么会出现五个有效元素,则这与此直接相关。仅供参考,是恒星。或者将其声明为static
。例如,静态队列arr[10]
@itachi我试图将arr声明为queue*arr=malloc(sizeof(struct queueRecord)*10)
,那么arr在函数中也只有5个元素。当我分配内存时,一定是出了什么问题…@itachi嘿,你是对的!它在动态地将内存分配给arr
后工作。令人困惑的是,其中只有5个在XCODE的调试模式下显示。。。不管怎样,这个程序现在运行良好。谢谢但是当我使用queue*arr=malloc(10*sizeof(*arr))
,我得到了一个arr
,即使在函数initQArr
中也只有5个有效元素,您如何检查这个?你会打印数组内容并得到奇怪的指针吗?“valid”元素是什么意思?它在我动态分配内存后工作!然而,当我在XCODE中调试时,调试窗口中只显示5个元素,这太奇怪了……我不熟悉XCODE或它的调试器,但是因为C数组不知道它们的大小,调试器也不能。在gdb(它似乎是Xcode支持的调试器之一)中,您必须打印p*arr@10
,其中@
后面的数字是要打印的条目数。
queue* initQArr(int maxSize){
queue *arr = malloc(10 * sizeof(*arr));
for (int i=0; i<10; i++) {
arr[i]=createQueue(maxSize);
}
return arr;
}