C 指针数组地址分配

标签 c arrays pointers

#define MAX_LINES 20
#define MAX_LINE 20

int main(){

    char *lines[MAX_LINES];
    for(int i=0;i<MAX_LINES;i++){

            char line[MAX_LINE];
            lines[MAX_LINES+i]=line;

    }
}

我很困惑,为什么我的指针数组“lines”在分配了“line”地址时没有任何地址发生变化。为什么该作业不起作用?

最佳答案

您在数组中分配了错误的索引,当您需要使用它时,您分配的内容将不存在,line 变量超出范围。要解决这个问题:

#define MAX_LINES 20
#define MAX_LINE 20

int main(){
  char *lines[MAX_LINES];

  for(int i=0;i<MAX_LINES;i++){
    lines[i] = malloc(MAX_LINE);
  }

  return 0;
}

虽然原则上您应该始终释放您分配的任何内容,因此编写一个函数来分配并释放它是这里最好的方法。

关于C 指针数组地址分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648246/

相关文章:

c - 如何摆脱警告: deprecated conversion from string constant to char*

c - 与管道的双向通信

c++ - 检查 C++ 数组中的主题标签

javascript - 如何从对象数组中获取键值列表 - JavaScript

c++ - 理解 C++ 指向父类/基类的指针

c - 为什么 OpenCL 找不到任何设备?

c++ - 如何检查 malloc() 实现中返回数据的对齐?

c - 指针的数组表示法

c - 不使用选择排序对三个指针进行排序

c++ - 传递硬件寄存器指针