我有三個不同的實驗室助教看着我的代碼,他們都沒有能夠幫助我,所以我決定在這裏嘗試。除非我刪除所有與gettimeofday和任何信號量有關的代碼,否則我會得到「分段錯誤(核心轉儲)」錯誤。我用簡單的聲明將我的代碼簡化爲只有主線程,以試圖找到問題的根源。多線程初始化中的未知分段錯誤(核心轉儲)
我的代碼:
#include <pthread.h>
#include <semaphore.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/time.h>
void *threadN (void *); /* thread routines */
pthread_t tid[1]; /* array of thread IDs */
int main()
{
int i,j;
/* here create and initialize all semaphores */
int mutex = sem_create(777777, 1);
int MatrixA[6000][3000];
for (i=0; i < 6000; i++) {
for (j=0; j < 3000; j++) {
MatrixA[i][j]=i*j;
}
}
int MatrixB[3000][1000];
for (i=0; i < 3000; i++) {
for (j=0; j < 1000; j++) {
MatrixB[i][j]=i*j;
}
}
int MatrixC[6000][1000];
struct timeval tim;
gettimeofday(&tim, NULL);
float t1=tim.tv_sec+(tim.tv_usec/1000000.0);
gettimeofday(&tim, NULL);
float t2=tim.tv_sec+(tim.tv_usec/1000000.0);
printf("%.2lf seconds elapsed\n", t2-t1);
sem_rm(sem_open(777777, 1));
return 0;
}
我在這裏完全難住了。
你可以請你解釋一下你的代碼試圖做什麼嗎?輸入特定值時預期的輸出是什麼?沒有這些信息,很難調試你的問題。 – JamesENL 2015-03-31 03:36:07
在這一點上,代碼沒有做任何事情。這只是一個開始,最終會使用多線程來快速爲數組賦值,但在達到這一點之前,我需要第一部分能夠運行,而不會簡單地給出分段錯誤而沒有別的。 – user2785277 2015-03-31 03:48:16
在這種情況下,您是否可以縮小您的seg故障所在的哪條線? C語言中的線程是一件非常棘手的事情。 – JamesENL 2015-03-31 03:49:47