簡體   English   中英

細分錯誤/ malloc錯誤?

[英]segmentation fault / malloc error?

編輯:現在解決問題,謝謝大家

因此,我正在為最后的C課程編寫代碼。 我已經寫了一個函數FastDFS來執行傅立葉變換。 以下代碼應該為不同的輸入大小確定該過程的時間。

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

void FastDFS(complex double *, complex double *, complex double *, complex double *, int, int);
void print_complex_vector(complex double *, int);
void free_complex_vector(complex double *);
complex double *make_complex_vector(int);
complex double *MakeWpowers(int);

int main(void)
{
    int i,N, operations_required;
    int index_counter = 1;
    double initial_time, final_time, time_taken, mega_flops_rate;

    complex double *mega_flops_vector = make_complex_vector(21);

    for(N = 2; N <= pow(2,20); N = N * 2)
    {
        complex double *Wp = MakeWpowers(N);
        complex double *y = make_complex_vector(N);
        complex double *x = make_complex_vector(N);
        complex double *w = make_complex_vector(N);

        printf("N = %d\n",N);

        operations_required = 1024;

        for(i = 1; i <= N; i++)
        {
            y[i] = i;
        }

        initial_time = clock();
        FastDFS(x,y,w,Wp,N,1);
        final_time = clock();

        time_taken = (final_time - initial_time) / CLOCKS_PER_SEC;

        mega_flops_rate = operations_required / (time_taken * pow(10,6));

        free(Wp);
        free(y);
        free(x);
        free(w);
    }

    return(0);
}

該代碼已與原始代碼進行了一些簡化,但包含相同的錯誤。 在某個階段,或者出現錯誤“ timings.out(49621,0x7fff7e684300)malloc:***對象0x7f81ca80c208的錯誤:已釋放對象的校驗和不正確-對象可能在釋放后已被修改。” 返回或細分錯誤:11。 程序崩潰的發生位置因不同的運行而有所不同,但從沒有出現N = 8192。

我編寫了一個主要功能來測試代碼,並且不會遇到這些錯誤。 主要使用相同的功能(make_complex_vector等)。 我可以看到的區別是,我一次不對主指針中的任何指針進行釋放,因為我一次只針對一個N值對其進行測試,但是我不知道這如何導致它崩潰? 我可以在代碼中運行比N大得多的N值。

有人可以在這里看到明顯錯誤的東西嗎? 非常感謝

您正在從1-> N進行迭代並分配給y 在C語言中,數組的索引為0。 例如,如果創建一個大小為5的數組,則元素的編號如下:

[a[0], a[1], a[2], a[3], a[4]] (5個元素,編號為0-4)

所以代替

for(i = 1; i <= N; i++)

你真正想要的是

for(i = 0; i < N; i++)

否則,您將要寫到已分配內存的末尾。 如果希望向量的第一個元素為1,則編寫如下代碼:

for(i = 0; i < N; i++)
{
    y[i] = i + 1;
}

(我假設make_complex_vector(N)分配大小為N的數組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM