Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 长数组的打印元素输出错误,_C_Arrays_Printf - Fatal编程技术网

C 长数组的打印元素输出错误,

C 长数组的打印元素输出错误,,c,arrays,printf,C,Arrays,Printf,我试图写一个函数,它接受列表的大小和上限(对于随机数),并返回数组中的随机数。 这是我写的 bool inList(long *heads, int num, int s){ for (int i=0; i<s; i++){ if (heads[i] == num){ return true; } } return false; } long* generateRandomList(size_t s, in

我试图写一个函数,它接受列表的大小和上限(对于随机数),并返回数组中的随机数。 这是我写的

bool inList(long *heads, int num, int s){
    for (int i=0; i<s; i++){
        if (heads[i] == num){
            return true;
        }
    }
    return false;

}

long* generateRandomList(size_t s, int n){
    long heads[s];
    for (long i=0; i<s; i++){
        heads[i] = -1;
    }
    srand(time(NULL));
    for(int i=0; i<s; i++){
        int r;
        while (true){
            r = ( rand() % n ) + 1;

            bool isInList = inList(heads, r, s); // unique numbers

            if (isInList == false){
                break;
            }
        }
        heads[i] = r;
        printf("i %d r %d\n", i, r); // this is ok

    }
    return heads;
}



int main(){
    size_t s = 20;
    size_t n = 100;
    long *lists;
    lists = generateRandomList(s, n);

for (int i=0; i<s;i++){
      printf("%d, %d\n",i, lists[i] );
  }
首先,我相信

printf("%d, %d\n",i, heads[i] );
应该读

printf("%d, %d\n",i, lists[i] );
这是这个代码段中的一个输入错误


谈到问题,在代码中,首先,
heads
数组是函数
generateRandomList()
的本地数组。这就是为什么函数中的第一个
printf()
通过访问
heads
数组来生成正确的输出

函数完成后,
返回
局部变量的地址,该地址在返回后无效。因此,访问调用者函数中返回的指针实质上是访问无效内存并调用。这就是在第二次打印时打印垃圾值的原因

解决方案:如果需要
从函数返回
指针并在调用者中使用,则必须定义指针并使用动态内存分配API(如和系列)分配内存

敲门敲门:也别忘了

下一步,对格式sopecifier使用错误类型的参数也会调用UB
%d
需要类型为
int
的参数,但您在那里传递的是
long

解决方案:
long
首先需要有
%ld
格式说明符和
printf()

printf("%d, %d\n",i, heads[i] );
应该读

printf("%d, %d\n",i, lists[i] );
这是这个代码段中的一个输入错误


谈到问题,在代码中,首先,
heads
数组是函数
generateRandomList()
的本地数组。这就是为什么函数中的第一个
printf()
通过访问
heads
数组来生成正确的输出

函数完成后,
返回
局部变量的地址,该地址在返回后无效。因此,访问调用者函数中返回的指针实质上是访问无效内存并调用。这就是在第二次打印时打印垃圾值的原因

解决方案:如果需要
从函数返回
指针并在调用者中使用,则必须定义指针并使用动态内存分配API(如和系列)分配内存

敲门敲门:也别忘了

下一步,对格式sopecifier使用错误类型的参数也会调用UB
%d
需要类型为
int
的参数,但您在那里传递的是
long

解决方案:
long
首先需要有
%ld
格式说明符和
printf()

printf("%d, %d\n",i, heads[i] );
应该读

printf("%d, %d\n",i, lists[i] );
这是这个代码段中的一个输入错误


谈到问题,在代码中,首先,
heads
数组是函数
generateRandomList()
的本地数组。这就是为什么函数中的第一个
printf()
通过访问
heads
数组来生成正确的输出

函数完成后,
返回
局部变量的地址,该地址在返回后无效。因此,访问调用者函数中返回的指针实质上是访问无效内存并调用。这就是在第二次打印时打印垃圾值的原因

解决方案:如果需要
从函数返回
指针并在调用者中使用,则必须定义指针并使用动态内存分配API(如和系列)分配内存

敲门敲门:也别忘了

下一步,对格式sopecifier使用错误类型的参数也会调用UB
%d
需要类型为
int
的参数,但您在那里传递的是
long

解决方案:
long
首先需要有
%ld
格式说明符和
printf()

printf("%d, %d\n",i, heads[i] );
应该读

printf("%d, %d\n",i, lists[i] );
这是这个代码段中的一个输入错误


谈到问题,在代码中,首先,
heads
数组是函数
generateRandomList()
的本地数组。这就是为什么函数中的第一个
printf()
通过访问
heads
数组来生成正确的输出

函数完成后,
返回
局部变量的地址,该地址在返回后无效。因此,访问调用者函数中返回的指针实质上是访问无效内存并调用。这就是在第二次打印时打印垃圾值的原因

解决方案:如果需要
从函数返回
指针并在调用者中使用,则必须定义指针并使用动态内存分配API(如和系列)分配内存

敲门敲门:也别忘了

下一步,对格式sopecifier使用错误类型的参数也会调用UB
%d
需要类型为
int
的参数,但您在那里传递的是
long


解决方案:
long
需要使用
%ld
格式说明符和
printf()。因此,您的程序偶尔可能会转储内核

更重要的是,从堆栈上不再存在的函数返回一个局部自动变量,该变量将被下一个函数调用覆盖

避免使用动态数组,除非在非常有限的情况下,您知道stacksize足够了


如果要返回持久数组,请使用malloc()而不是动态数组。

您使用的动态数组没有干净的w