поврежденный размер по сравнению с prev_size в C - PullRequest
0 голосов
/ 11 июня 2018

Я получаю ошибку «размер поврежден против prev_size» всякий раз, когда я выделяю динамическую память в потоке.Всякий раз, когда я выделяю память в main (), она работает нормально.Но выделение динамической памяти в потоке приводит к ошибке.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *fib(void *p);
struct mystruct
{
    int *array;
    int size;
};

int main(int argc, char *argv[])
{
    pthread_t tid;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    struct mystruct obj;

    obj.size = atoi(argv[1]);;

    pthread_create(&tid, &attr, fib, (void *)&obj);
    pthread_join(tid, NULL);
}

void *fib (void *p)
{
    struct mystruct *x = (struct mystruct *)p;
    x->array = (int *) malloc (x->size);

    for (int i=0; i<x->size; i++){
        x->array[i] = i;
        printf("The array is = %d\n", x->array[i]);
    }   
}

Я добавил снимок для деталей.

error saying corrupted size vs prev_size

Спасибо!

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте ввести следующую строку:

x->array =  malloc (x->size*sizeof(int));

Вам необходимо выделить место для x->size целых чисел.malloc принимает в качестве параметра необходимое количество байтов.А для n int вам нужно n раз больше в байтах одного int.

Не забудьте return от основного.

...