我想分配內存的數組是我需要使用的結構的成員,在一個函數,將結構作爲參數。作爲參數傳遞的結構中的數組的malloc
arg->A.size=(int*) malloc(N*sizeof(int));
不會編譯(請求構件「尺寸」是東西不是結構。
arg->A->size=(int*) malloc(N*sizeof(int));
將拋出一個分段錯誤
任何幫助將受到讚賞。 這裏是代碼,謝謝:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// struct A
struct A {
int dim; // dimensions
int* size; // points per dim array
double* val; // values stored in array
int total; // pow(size,dim)
};
// struct B that uses A
struct B {
int tag;
struct A* A;
};
int function_AB(struct B* B);
int main(void){
struct B B;
function_AB(&B);
return 0;
}
int function_AB(struct B* arg){
int N=10;
arg->tag=99;
printf("tag assigned = %d \n", arg->tag);
arg->A->size=(int*) malloc(N*sizeof(int));
return 0;
}
到目前爲止,我認爲Sathish是正確的(擴展已由downhillFromHere第一個答案建議的變化)。在函數內部實現它正是我正在尋找的,所以我特別使用arg-> A = malloc(sizeof(struct A))指令,而不管前/後賦值如何。我仍然會使用malloc int和double casting來設置size和val。有什麼理由避免這樣做?我仍然需要弄清楚在函數返回之前是否必須使用free,size和val。如果出現問題,我會更新。非常感謝你。 – mae 2014-08-27 15:02:16
@mae在c'malloc'中將分配內存並將適當的指針返回給分配的內存!如果你發現這個答案是有幫助的,不要忘記驗證它! – Sathish 2014-08-27 15:07:42
你說得對。由於從實際需要的C++遷移而導致的錯誤做法。 – mae 2014-08-28 07:41:03