首页 > 解决方案 > C中损坏的大小与prev_size

问题描述

每当我在线程中分配动态内存时,我都会收到“损坏的大小与 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]);
    }   
}

我已添加快照以获取详细信息。

错误说损坏的大小与 prev_size

谢谢!

标签: cpthreadsdynamic-memory-allocation

解决方案


尝试以下行:

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

您需要为x->size整数分配空间。malloc接受您需要的字节数作为参数。并且因为n int您需要n以字节为单位的单个int.

不要忘记return从主。


推荐阅读