【问题标题】:C dynamic allocating memory for array within a structC为结构内的数组动态分配内存
【发布时间】:2013-10-28 17:35:43
【问题描述】:

首先我定义了这个结构:

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

我的目标是接收_num_of_lines 作为用户的输入。 这将用于定义二维数组的行数data 而数组_lines_len代表data中每一行的长度

我正在尝试为 _lines_len 分配内存,但我总是返回数组的大小为 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);

【问题讨论】:

  • sizeof 在指针上返回指针的大小,而不是它后面的缓冲区。
  • sizeof(linesStruct._lines_len) 返回 int * 的内存大小,而不是数组的长度。
  • hmmm 那我还不太明白,我怎么知道分配后数组的长度是多少?

标签: c arrays dynamic-data


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    变量len的值总是1,因为整数指针的大小和整数一样。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2021-11-27
      • 2020-04-18
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多