开始在C学习malloc.h.想法是创建动态数组.这是代码:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
int main() {
int *array = (int*)malloc(sizeof(int));
int i, j, val;
for (i = 0;; i++) {
array = (int*)realloc(array, sizeof(int) + sizeof(*array));
printf("Enter array[%d]=", i);
scanf("%d", (array + i));
if (*(array + i) == 0) break;
}
for (j = 0; j < i; j++) {
printf("[%d] = %d\n", j, *(array + j));
}
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是
Enter array[0]=1
Enter array[1]=2
Enter array[2]=3
Enter array[3]=4
Enter array[4]=5
Enter array[5]=6
Enter array[6]=7
Enter array[7]=8
Enter array[8]=9
Enter array[9]=10
Enter array[10]=0
[0] = 1
[1] = 2
[2] = 3
[3] = 4
[4] = 5
[5] = 6
[6] = 7
[7] = 8
[8] = 542979931
[9] = 875896893
Run Code Online (Sandbox Code Playgroud)
每次,>=8
值都是随机的.我不知道为什么会发生这样的错误呢?
您在代码中未定义的行为.我想,这样做:
array=(int*)realloc(array,sizeof(int)+sizeof(*array));
Run Code Online (Sandbox Code Playgroud)
你期望,这sizeof(*array)
将返回整个阵列的大小,对吧?但事实并非如此.sizeof
在编译时计算并且执行sizeof(*array)
实际上与sizeof(int)
.
因此,要使此数组可扩展,您需要拥有其他变量,保持当前数量的元素并执行以下操作:
array=(int*)realloc(array, sizeof(int) + current_size_of_array * sizeof( int ) );
Run Code Online (Sandbox Code Playgroud)
当你实际添加一个元素时,current_size_of_array
将在每个循环上for
增加.
归档时间: |
|
查看次数: |
440 次 |
最近记录: |