結構中的C語言指針數組

Code:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int *arr;
}example;

void Create(example var){
    var.arr = (int *)malloc(sizeof(int)*2);
}

int main(){
    example var1, var2;
    var1.arr = (int *)malloc(sizeof(int)*2);
    var1.arr[0] = 11;
    var1.arr[1] = 22;
    printf("%d %d\n",var1.arr[0],var1.arr[1]);
    Create(var2);
    var2.arr[0] = 111;
    var2.arr[1] = 222;
    printf("%d %d\n",var2.arr[0],var2.arr[1]);
    return 0;
}
OUT:
11 22
Segmentation Fault

我的代碼如上所述。當我像var1那樣手動操作時,我不會得到任何錯誤。但是如果我在var2中的函數中這樣做,我會得到一個錯誤。我怎樣才能解決這個問題。我想在函數里面做。

編輯:謝謝你的回答。成功了

? 最佳回答:

函數參數

void Create(example var){
    var.arr = (int *)malloc(sizeof(int)*2);
}

它的局部變量,由傳遞的參數初始化,退出函數后不活動。

就是這個電話

Create(var2);

未更改main中聲明的變量var2。

因此在這些聲明中

var2.arr[0] = 111;
var2.arr[1] = 222;

使用的未初始化指針arr具有調用未定義行為的不確定值。

您需要通過引用將變量傳遞給函數。例如

void Create(example *var){
    var->arr = (int *)malloc(sizeof(int)*2);
}

這個函數叫做

Create( &var2 );
主站蜘蛛池模板: 国产观看精品一区二区三区 | 精品国产一区二区三区久久狼| 国产一区二区三区在线2021| 色噜噜一区二区三区| 国产一区二区好的精华液| ...91久久精品一区二区三区| 99久久精品日本一区二区免费| 国内精品视频一区二区三区八戒| 一区二区三区无码高清| 制服中文字幕一区二区| 亚洲Av无码一区二区二三区 | 国产裸体舞一区二区三区| 精品乱子伦一区二区三区高清免费播放 | 成人免费一区二区无码视频 | 亚洲一区无码中文字幕乱码| 午夜视频在线观看一区| 国产在线精品一区二区夜色| 美女毛片一区二区三区四区| 无码人妻精品一区二区蜜桃百度 | 天堂国产一区二区三区| 国产精品成人免费一区二区 | 精品视频一区二区三三区四区 | 亚洲一区二区女搞男| 亚洲国产精品一区二区三区在线观看| 精品一区二区三人妻视频| 精品久久久久中文字幕一区| 精品国产一区二区三区香蕉| 国产激情无码一区二区三区| 亚洲一区精彩视频| 国产成人精品一区二区三区免费| 欧美激情国产精品视频一区二区 | 制服中文字幕一区二区 | 中文字幕Av一区乱码| 免费高清av一区二区三区| 日韩视频一区二区三区| 国产一区二区三区在线看片| 无码少妇一区二区三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日日摸夜夜添一区| 亚洲欧美日韩一区二区三区在线 | 一区二区视频在线免费观看|