c - C 中的动态双数组

标签 c arrays

我正在尝试使用 malloc 创建一个数组,但我不断收到此错误。

严重性代码描述项目文件行 警告 C4047 '=':'DynamicArray *' 的间接级别与 'double **' cStudy 19 不同

严重性代码描述项目文件行 警告 C4133“初始化”:不兼容的类型 - 从“int *”到“double *”cStudy 36

 typedef struct
{
double *arrayPointer;
int effectiveSize;
int maximumSize;
} DynamicArray;

void CreateArray(DynamicArray *mArray, int initialSize)
{ 
//TODO: Use malloc to create an array of the initial size.  Assign to   the arrayPointer variable

//TODO: Set effective size to 0 and maximum size to the initial size
mArray->arrayPointer = malloc(initialSize *sizeof(double));
mArray->effectiveSize = 0;
mArray->maximumSize = initialSize;
}

void ExpandArray(DynamicArray *mArray, int newSize) {

    double* newArray;

    mArray->arrayPointer = newArray = (int *)malloc(newSize * sizeof(double));
    memcpy(newArray, &mArray[mArray->effectiveSize], mArray->effectiveSize * sizeof(double));


    free(mArray->arrayPointer);
    //mArray->effectiveSize = 0;
    mArray->maximumSize = newSize;

}

更新了代码,但扩展不起作用。

最佳答案

这个作业

mArray = (double *)malloc(initialSize * sizeof(double *));

应该是

mArray->arrayPointer = malloc(initialSize * sizeof(double));

需要进行一些更改:

  • sizeof 应该是 double,而不是 double*
  • 赋值应该是给 mArray->arrayPointer,而不是给 mArray 本身。
  • 在 C 中不需要强制转换为 double*

关于转换的要点也适用于这一行:

double* newArray = (int *)malloc(newSize * sizeof(double));

但请注意,ExpandArray 可能会使用 realloc ,而不是普通的 malloc

关于c - C 中的动态双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714694/

相关文章:

C - 在不重新分配内存的情况下将 C 字符串拆分为单词

C函数返回指向结构的指针

javascript - 如何按对象字符串值之一对对象数组进行数字排序?

c++ - 字符字符串数组的初始化程序中的问题

c++ - 在main和函数中获得同一数组的不同sizeof值

c# - 存储对结构数组的 C# 引用并检索它 - 可以不复制吗?

c - 创建单位矩阵时出现性能异常

使用 winegcc 编译 Visual C++ 6 项目

c - Linux 内核模块 : dynamically loading code at runtime

c - 这两种数组声明有什么区别?