我正在尝试使用 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/