C为结构中的数组动态分配内存

时间:2013-10-28 17:35:44

标签: c arrays dynamic-data

首先我定义了这个结构:

typedef struct{
    int **_data;
    int _num_of_lines;
    int *_lines_len;
} Lines;

我的目标是从用户那里收到_num_of_lines作为输入。 这将用于定义2D数组data的行数 而数组_lines_len代表data

中每一行的长度

我正在为_lines_len尝试malloc内存,但我总是回过头来看,数组的大小是2,我不明白为什么......

int main(int argc, char *argv[]) {
    Lines linesStruct;
    printf("enter num of lines:\n ");
    scanf("%d",&linesStruct._num_of_lines);
    printf("Num of lines is = %d \n", linesStruct._num_of_lines);

    linesStruct._lines_len = (int*) malloc(linesStruct._num_of_lines * sizeof(int));
    int len = (int) ((sizeof(linesStruct._lines_len))/(sizeof(int)));
    printf("number of lines len = %d \n", len);

2 个答案:

答案 0 :(得分:1)

sizeof(linesStruct._lines_len)返回指针的大小(即两个单词)。在编译时,实际上没有办法静态地确定数组大小。但无论如何,你已经将它存储在_num_of_lines中。

答案 1 :(得分:0)

linesStruct._num_of_lines 已经告诉您数组大小。

变量 len 的值始终为1,因为整数指针的大小与整数相同。

int len = (int) ((sizeof(linesStruct._lines_len))/(sizeof(int)));

另外,You don't cast the malloc() result