Ich habe ein ProblemDoppel frei oder Korruption
Fehler in `./thread ': Doppel frei oder Korruption (out): 0x00000000021bb030
Zweck meines Programms eingegeben wird: Anzahl der Gewinde (argv [1]) und lies data.txt 100 Integer und jede Sortierung der Threads. in jetzt
ist mein ganzes Code dort ..
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *bubble(void *data){
int * arr = data;
int i,j,tmp;
int size = (sizeof(arr)/4);
printf("%d",size);
for(i=0;i<size;i++){
for(j=0;j<size-1;){
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
for(i=0;i<size;i++) printf("%d ",arr[i]);
printf("\n");
return ((void *)0);
}
int main(int argc, char **argv){
FILE * fd;
int data[100];
int i,j;
int tcount = atoi(argv[1]);
int n = 100/tcount;
int cursor=0;
int err;
pthread_t *thread_t = (pthread_t *)malloc(tcount* sizeof(pthread_t));
int **data3 = (int **)malloc(tcount *sizeof(int*));
for(i=0; i<tcount; i++)
data3[i] = (int *)malloc((100/tcount) *sizeof(int));
fd = fopen("data.txt", "r");
printf("tcount = %d n=%d\n",tcount,n);
for(i =0; i<100;i++)
{
fscanf(fd, "%d",&data[i]);
printf("%d ", data[i]);
}
for(j=0;j<tcount;j++){
for(i=0;i<n;i++){
data3[j][i]=data[n*j+i];
printf("%d ",data3[j][i]);
}
printf("\n");
}
for(i =tcount; i>0;i--)
{
err=pthread_create(&thread_t[i],NULL,bubble,(void *)&data3[i]);
if(err != 0)
printf("creat thread error");
}
for(int i=0; i<tcount; i++)
free(data3[i]);
free(data3);
free(thread_t);
fclose(fd);
}
Diese 'int size = (sizeof (FER)/4);' berechnet nicht die Größe des Arrays, auf die 1. Element 'arr' Punkte ist. Hinweis 'arr' ist ein Zeiger und kein Array. Ein minimaler Debugging-Aufwand hätte dies aufgedeckt. – alk
'für (i = tcount; i> 0; i -)' beginnt bei 'tcount' –