這個問題,就是要用作此FAQ規範重複:動態存儲器存取只能內部功能
我在函數內部動態分配的數據,一切運作良好,但只是裏面的函數,其中分配發生。當我嘗試在函數外部使用相同的數據時,出現崩潰或其他意外的程序行爲。
這裏是一個MCVE:
#include <stdlib.h>
#include <stdio.h>
void print_array (int* data, int size)
{
for(int i=0; i<size; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
void create_array (int* data, int size)
{
data = malloc(sizeof(*data) * size);
for(int i=0; i<size; i++)
{
data[i] = i;
}
print_array(data, size);
}
int main (void)
{
int* data;
const int size = 5;
create_array(data, size);
print_array(data, size); // crash here
}
每當print_array
從create_array
函數中調用,我得到預期的輸出0 1 2 3 4
,但是當我把它從main
,我得到一個程序崩潰。
這是什麼原因?
我幾乎低估了你犯了這樣一個愚蠢的錯誤:) –
@ Jean-FrançoisFabre不幸的是,我還沒有找到一種方法來提出這個問題社區維基,只有答案。我推出了mods,希望它很快會轉化爲社區wiki。 – Lundin
我認爲可以更好地託管在文檔測試版上。 – LPs