【发布时间】:2013-11-17 04:01:11
【问题描述】:
所以我试图动态生成一个随机整数数组。问题是相同的地址 j 被添加到数组中。有人可以对此有所启发吗?感谢您的宝贵时间。
#define size 100
int main(void){
srand(time(NULL));
int *array = (int *) malloc(sizeof(int) * size);
for (int i = 0; i < size; i += 1){
int j = rand();
array[i] = &j;
}
IntArray_printArray(array, size);
}
打印函数的输出:
Array Contents: [2702], [2702], [2702], [2702], [2702], [2702], ... [2702], [2702], [2702], [2702], [2702], [2702], ... [2702], [2702], [2702], [2702], [2702], [2702]
编辑 1:“IntArray_printArray”函数:
void IntArray_printArray(int *array, int size){
printf("Array Contents: ");
if (size <= 20){
printf("Array Contents: ");
for (int i = 0; i < size - 1; i += 1){
printf("[%d], ", *(int*)array[i]);
}
printf("[%d]\n", *(int*)array[size-1]);
} else {
for (int i = 0; i < 6; i += 1){
printf("[%d], ", *(int*)array[i]);
}
printf(" ... ");
for (int i = size/2 - 3; i < size/2 + 3; i += 1){
printf("[%d], ", *(int*)array[i]);
}
printf(" ... ");
for (int i = size - 6; i < size - 1; i += 1){
printf("[%d], ", *(int*)array[i]);
}
printf("[%d]\n", *(int*)array[size-1]);
}
}
【问题讨论】:
-
似乎函数 IntArray_printArray 是罪魁祸首。把这个函数的代码贴出来,方便大家判断问题。
-
编译器应该给你一个关于这个代码的警告,因为
array[i]是一个int,但是你正试图给它分配一个int*。如果您没有在启用警告的情况下进行编译,请这样做。如果是,请不要忽略警告。 -
@Buddha Thx,我添加了功能
-
size的值是多少?你初始化了吗?否则malloc可能会失败,然后分配给array[i]时会出现分段错误,因为如果malloc 失败,array == NULL。 -
是的,它是顶部的#define。我会添加它