[英]Dynamic memory allocation with / without function
我嘗試創建 function 為二維數組動態分配 memory 並將一些 integer 值放入數組中。 總體而言,function 按預期工作,但存在一些錯誤。 所以我在main()
中做了同樣的事情並得到了正確的結果。 我的代碼如下:
#include <stdlib.h>
#include <stdio.h>
void test(int d1, int d2, int ***p){
int value;
*p = (int **)(malloc(sizeof(int)*d1));
for (int i = 0; i < d1; i++){
(*p)[i] = (int *)(malloc(sizeof(int)*d2));
for (int j = 0; j < d2; j++){
(*p)[i][j] = i * 10 + j;
}
}
printf("\n");
}
int main(void){
int d1, d2;
int ** ptr;
printf("length of 1st dimension?\n");
scanf("%d", &d1);
printf("length of 2nd dimension?\n");
scanf("%d", &d2);
test(d1, d2, &ptr);
for (int i=0; i<d1; i++){
for (int j=0; j<d2; j++){
printf("%d ", ptr[i][j]);
}
printf("\n");
}
free(ptr);
ptr = (int **)(malloc(sizeof(int)*d1));
for (int i=0; i< d1; i++){
ptr[i] = (int *)(malloc(sizeof(int)*d2));
for (int j=0; j<d2; j++){
ptr[i][j] = i *10 +j;
}
}
printf("\n######################\n\n");
for (int i=0;i<d1;i++){
for (int j=0; j<d2;j++){
printf("%d ", ptr[i][j]);
}
printf("\n");
}
free(ptr);
return 0;
}`
當我將 5 作為一維和二維的長度傳遞時,我得到如下結果:
length of 1st dimension?
5
length of 2nd dimension?
5
532699424 32725 2 3 4
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
######################
0 1 2 3 4
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
我想,除了我將指針傳遞給指針作為參數傳遞給 function 之外,我做了同樣的事情。 但是,第一行中的某些值不同。 每當我執行 function 時,第一行都會得到不同的值。
有人可以讓我知道我做錯了什么嗎?
先感謝您。
台詞
*p = (int **)(malloc(sizeof(int)*d1));
ptr = (int **)(malloc(sizeof(int)*d1));
錯了。 元素是int*
,但每個元素只分配int
空間。 如果int*
大於int
(例如,當int*
是 8 個字節而int
是 4 個字節時),這可能會導致問題。
線條應該是
*p = malloc(sizeof(int*)*d1);
ptr = malloc(sizeof(int*)*d1);
或(通過避免手動輸入來減少出錯的風險)
*p = malloc(sizeof(*p)*d1);
ptr = malloc(sizeof(*ptr)*d1);
另請參閱: c - 我是否投射 malloc 的結果? - 堆棧溢出
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.