c - 我是否为 C 中的指针数组正确分配了内存?

标签 c arrays pointers malloc

我正在尝试找出一个大程序的错误。我认为这是由于我将数组传递给函数的方式造成的。我这样做正确吗?

main(){
    int *x = declarArray(x, 100);
    int *y = declarArray(x, 100);

    // lines of code....

    x = arrayManip(x, 100);

    // more code...

    int i;
    for(i=0; i<100; i++)
        y[i] = x[i];

    //more code...

    free(x);
    free(y);

}

这就是我操作数组的方式:

int *arrayManip(int *myarray, int length){
    int i;
    for(i=0; i<length; i++)
        myarray[i] = i;
    return array;
}

这就是我初始化数组的方式:

int* declareArray(int *myarray, int length){
    myarray = (int*) malloc(length*sizeof(int*));
    if (myarray==NULL)
        printf("Error allocating memory!\n");
    int i;
    for(i=0; i<length; i++)
        myarray[i] = -888;
    return myarray;
}

这段代码似乎在小规模上工作得很好,但是一旦我有更多更大尺寸的数组,这些数组经常在我的程序中来回传递和复制,也许就会出现问题?

最佳答案

声明数组:

  1. 名称语法不正确
  2. 函数的名称并不代表它的作用
  3. 使用 sizeof(int*) 进行 malloc,而不是使用 sizeof(int)。保证在 64 位机器上是一个错误
  4. malloc 失败,打印,但仍然写入 null
  5. 将 myarray 作为参数传递是一个 noop
  6. -888是一个神奇的数字
  7. 没有任何错误检查

我的建议。扔掉它并重新开始

关于c - 我是否为 C 中的指针数组正确分配了内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092861/

相关文章:

c - strtok() 没有按预期工作

php - javascript根据下拉选择自动填充文本输入

javascript - 通过粘性和默认排序功能对数组进行排序

c - free 中是否有检查空指针的额外开销?

c++ - 我什么时候应该为我的类(class)提供析构函数?

pointers - 在 CUDA 中,如何将设备指针数组复制到设备内存?

C - strncpy 用法 - 段错误

c - 在服务器上远程执行自定义命令 c windows

c++ - 掩蔽的工作原理

javascript - 遍历javascript对象IE8