每当我在线程中分配动态内存时,我都会得到“corrupted size vs 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]);
}
}
我已经添加了快照的细节。
谢谢!
2条答案
按热度按时间xdyibdwo1#
尝试使用以下行:
您需要为
x->size
整数分配空间。malloc
接受您需要的字节数作为参数。对于n
int
,您需要n
乘以单个int
的字节数。别忘了从主菜单中选择
return
。gopyfrb32#
我遇到了同样的问题,我通过使用 malloc 的“对齐”版本解决了这个问题,即:分配的内存将被对齐。我使用了这个答案https://stackoverflow.com/a/1920516/2155258。