c - 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]);
}
}
我已添加快照以获取详细信息。
谢谢!
解决方案
尝试以下行:
x->array = malloc (x->size*sizeof(int));
您需要为x->size
整数分配空间。malloc
接受您需要的字节数作为参数。并且因为n
int
您需要n
以字节为单位的单个int
.
不要忘记return
从主。
推荐阅读
- javascript - 如何用道具制作条件并反应动态主题?
- jquery - jQuery Datatables 添加行问题,导航不起作用
- kotlin - 解释 RxJava 与 Kotlin 协程中扫描 + 发布到参与源的区别
- xcuitest - 使用快照测试测试暗模式
- powershell - 使用 powershell 读取 csv 文件
- android - 在安卓智能手机上调试第三方应用
- javascript - 如何通过javascript获取标签标签中的图像属性?
- google-cloud-platform - 如何使用 terraform 定义具有多个标签的基于 GCP 日志的指标,但无法定义 label_extractors 块
- azure - Azure Function App 中的不同队列触发器是否可以有不同的设置?
- android - 在android中,如果我有min api 21,cameraX是否覆盖所有设备,还是我需要为旧设备维护camera1实现?