【发布时间】:2021-03-28 09:39:32
【问题描述】:
谁能告诉我,为什么我不能通过 init() 函数为结构数组分配内存?在 main 中手动完成时,一切都很好。当通过 init() 尝试时,没有任何反应(也没有错误消息)。地址总是0x0,我猜是空指针。
#define GAMES 100
typedef struct{
double *scores;
}SCORES;
void init(SCORES *arr);
int main(){
SCORES *numbers = NULL;
init(numbers);
printf("Adress is: %p\n", numbers); //Still 0x0
return 0;
}
void init(SCORES *arr){
arr = (SCORES*) malloc(GAMES * sizeof(SCORES));
}
使用下面的代码尝试它适用于 malloc。我得到了一个地址,但如果我使用 free(),内存仍然被分配。
void init(SCORES **arr){
*arr = (SCORES*) malloc(GAMES * sizeof(SCORES));
}
...
init(&numbers);
...
free(numbers);
【问题讨论】:
-
“内存仍在分配”是什么意思?你如何验证这一点?
-
C(对于此代码也是 C++)使用按值传递。所以
init(numbers);在您的情况下与init(NULL);相同。换句话说-该函数对numbers一无所知 -
另外,强制注释使用
malloc()而不放置new是 C++ 中的未定义行为。 -
@Yksisarvinen 当我使用“ printf("Size: sizeof(number[0])); " 它仍然说为该地址分配了 16 个字节。