【发布时间】:2021-05-20 09:04:49
【问题描述】:
我在将整数添加到动态数组读取器时遇到问题,所以下面代码中的第二个函数。为什么输出中添加的数字看起来很奇怪?我猜是内存问题,不知怎么分配新内存不正确。
int *create_dyn_array(unsigned int n)
{
int *array = malloc(n * sizeof(*array));
for (size_t i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
return array;
}
int *add_dyn_array(int *arr, unsigned int num, int newval)
{
int *temp = NULL;
temp = realloc(arr, (num + 1)*sizeof(int));
arr = temp;
int *newarray = arr;
while(*arr) {
arr++;
}
int testarray[1];
int *ptr = testarray;
int j = 1;
while (j > 0) {
*ptr = newval;
ptr++;
j--;
}
ptr = testarray;
while(*ptr) {
*arr++ = *ptr++;
}
return newarray;
}
void printarray(const int *array, int size) {
printf("{ ");
for (int i = 0; i < size; ++i) {
printf("%d, ", array[i]);
}
printf(" }\n");
}
int main()
{
int *array = create_dyn_array(5);
printarray(array, 5);
array = add_dyn_array(array, 5, 10);
printarray(array, 6);
array = add_dyn_array(array, 6, 100);
printarray(array, 7);
array = add_dyn_array(array, 7, 1000);
printarray(array, 8);
return 0;
}
realloc 逻辑有什么问题?
【问题讨论】:
-
那个仪式应该做什么?添加应该只是
realloc(...);temp[num]=newval; return temp;,不需要更多。也就是说,如果您尝试将newval添加到数组的末尾。如果这应该做其他事情,请在问题中解释。 -
如果您尝试添加多个元素并用 newval 填充它们,您需要知道以前的大小和新的大小。您不能假设 realloc 添加的额外元素最初会具有任何特定值。
-
请不要添加文字图片。改为将其作为文本添加到您的问题中。
标签: arrays c pointers memory dynamic