我正在尝试测试一个程序,该程序创建一个包含0个元素的数组,然后向其中添加元素(每次重新分配内存),然后打印出元素。但是,当我尝试运行它时,我一直都会遇到错误。
int main(int argc, const char * argv[]) {
int num = 0;
int n = 10;
int **array = malloc(0);
for (int i = 0; i < n; ++i)
{
++num;
array = realloc(array, num * sizeof(int*));
array[num-1] = &i;
}
for (int j = 0; j < n; ++j)
{
printf("%d", &array[j]); // error 1
}
return 0;
}
对不起,我没有在原帖中包含错误。我想我修好了其中一个。这是另一个:
错误1:Format指定类型'int'但参数的类型为'int *'
答案 0 :(得分:1)
这个答案基于您打印一个简单数组的假设,因为您没有显示您期望的输出。你使用的是间接的一个步骤而不是你需要的,以及太多的变量。请注意,索引与长度不同(通常为1)。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, n = 10;
int *array = NULL; // no need for double star, or fake allocation
for (i = 0; i < n; ++i)
{
array = realloc(array, (i + 1) * sizeof(int)); // remove the *, add 1 for num elements
array[i] = i;
}
for (i = 0; i < n; ++i)
{
printf("%d", array[i]); // remove the &
}
free(array); // don't forget this
return 0;
}
节目输出:
0123456789
实际上,您应该将realloc
的结果分配给另一个指针变量,检查它是否正常,然后替换原始指针var。
答案 1 :(得分:0)
printf("%d", &array[j]); // error 1
&amp;是地址运算符。所以它正在制作一个指针。你的数组已经是一个指向整数的指针数组。
使用&amp;您正在尝试打印整数指针本身的地址。
尝试使用*而不是&amp ;. *表示您要打印整数指针的值。
printf("%d", *array[j]); // error 1