如果 for 中没有 printf,程序不会 return 什么都没有

program doesen't return nothing if there isn't printf in for

我正在尝试在我的程序中生成随机数组。 如果在 for i 中输入 printf("%d", i);我的程序 运行 并花时间打印所有值,然后打印“结束”,但如果我在 for 中注释 printf,当我在 1-2 秒后执行程序时,它结束时没有给出任何返回结果的类型(无错误,无 printf)。

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>



//Costanti
static double E = 0.001; // Errore relativo massimo ammissibile

static int nMin = 100; // A = nMin
static int nMax = 5000000;

 double B;

double duration(struct timespec start, struct timespec end) {
    return end.tv_sec - start.tv_sec
        + ((end.tv_nsec - start.tv_nsec) / (double)1000000000.0);
}
double getResolution() {
    struct timespec start, end;
    clock_gettime(CLOCK_MONOTONIC, &start);
    do {
        clock_gettime(CLOCK_MONOTONIC, &end);
    } while (duration(start, end) == 0.0);
    return duration(start, end);
}
int main() {

    // Inizializzazione variabili per il calcolo del tempo

    double tMin = getResolution() * ((1 / E) + 1);
    B = exp((log(nMax) - log(nMin)) / 99);

    srand(time(NULL));

    // Generazione Input per l'algoritmo
    //struct timespec inizio, fine;

    //clock_gettime(CLOCK_MONOTONIC, &inizio);

    for (int j = 0; j < 100; j++) {
        int n = nMin * pow(B,j);
        
        int array[n];

        for (int i = 0; i < n; i++) {
            array[i] = rand();
            //printf("%d", i);
        }

    }
    //clock_gettime(CLOCK_MONOTONIC, &fine);

    //double quantodura = duration(inizio, fine);

    //printf("generation time: %f", quantodura);
    printf("ciao");
    return 0;
}

即使我注释掉所有的struct timespec inizio,也没关系; clock_gettime等等。它不起作用

它没有 return 什么。一个程序总是return一个退出代码。 (如果使用“sh”,可以使用 echo $? 获得。)我得到 139,表明我的系统存在分段冲突。使用 -fsanitize=address 确定堆栈溢出是原因。

AddressSanitizer:DEADLYSIGNAL
=================================================================
==1==ERROR: AddressSanitizer: stack-overflow on address 0x7fff91751728 (pc 0x00000040175f bp 0x7fff92031910 sp 0x7fff91751730 T0)
    #0 0x40175f in main /app/example.c:46
    #1 0x7f5eafe2c0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
    #2 0x40117d in _start (/app/output.s+0x40117d)

SUMMARY: AddressSanitizer: stack-overflow /app/example.c:46 in main
==1==ABORTING

第 46 行是 int array[n];。这条线正在创建更大的阵列。最终,要创建的数组太大,堆栈无法容纳。 (这在我的测试中 n 为 2,326,588 时发生。B 为 1.115,487,而 j 为 92。)您需要在堆上分配如此大的数组(例如使用malloc) 而不是堆栈。