gpt4 book ai didi

c - C 中的线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0)

转载 作者:行者123 更新时间:2023-11-30 16:27:53 30 4
gpt4 key购买 nike

我是 C 编程初学者..当我构建项目时,内存线程发生在“matrixInit”函数中。我不知道为什么会发生..我想解决这个问题,请问您能告诉我这个线程发生的原因以及如何解决吗?

(在 Xcode 中编译)

main.c

#include <stdio.h>
#include "array2DvariableSize.h"
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
item a[] = {1,2,3,2,3,4,1,2,2};
item b[] = {2,4,3,4,3,4,1,5,2};

Matrix *m1 = matrixNew(3, 3);
matrixInit(m1, a);
matrixPrint(m1);

Matrix *m2 = matrixNew(3, 3);
matrixInit(m2, b);
matrixPrint(m2);

Matrix *m3;
m3 = matrixAdd(m1, m2);
matrixPrint(m3);

matrixFree(m1);
matrixFree(m2);
matrixFree(m3);
return 0;

}

array2DvariableSize.h

#ifndef array2DvariableSize_h
#define array2DvariableSize_h

#include <stdio.h>
typedef int item;
typedef struct {
int col;
int row;
item** var;
}Matrix;

Matrix* matrixNew(int row, int col);
void matrixInit(Matrix* m, item* src);
void matrixFree(Matrix* m);
Matrix* matrixMultiply(const Matrix* a, const Matrix* b);
Matrix* matrixAdd(const Matrix* a,const Matrix* b);
void matrixPrint(Matrix* m);
#endif /* array2DvariableSize_h */

array2DvariableSize.c

#include "array2DvariableSize.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Matrix* matrixNew(int row, int col){
Matrix* m;

m = (Matrix*)malloc(sizeof(Matrix));
m -> row = row;
m -> col = col;
m -> var = (item**)malloc(sizeof(item*)*row);
for (int i = 0; i<row; i++){
m->var[i] = (item*)malloc(sizeof(item)*col);
memset(m->var[i], 0, sizeof(item)*col);
}
}
return m;
}

void matrixFree(Matrix* m){
for (int i = 0 ; i < m -> row; i++){
free(m->var[i]);
}
free(m->var);
free(m);
}
void matrixInit(Matrix* m, item* src){
for(int j = 0 ; j< m->row; j++){
for(int i = 0; i < m->col; i++){
m->var[j][i] = src[j*m->col + i]; // Thread occurred in herd

}
}
}

Matrix* matrixAdd(const Matrix* a, const Matrix* b){
Matrix* m;
if(a->col != b->col || a->row != b->row) return NULL;

m = matrixNew(a->row, a->col);
for(int j = 0; j < a->row; j++){
for(int i = 0; i < a->col; i++){
m->var[j][i] = a->var[j][i] + b->var[j][i];
}
}
return m;
}

Matrix* matrixMultiply(const Matrix* a, const Matrix* b){
Matrix* m;
int col, row, iter;
if(a->col != b->row) return NULL;
row = a->row;
col = b->col;
iter = a->col;

m = matrixNew(row, col);
for (int j = 0; j<row; j++){
for(int i= 0; i< col; i++){
for(int k = 0; k < iter; k++){
m->var[j][i] += a->var[j][k] * b->var[k][i];
}
}
}
return m;
}

void matrixPrint(Matrix* m){
for(int j = 0; j < m->row; j++){
for(int i = 0; i < m->col; i++){
printf("%5d", m->var[j][i]);
}
printf("\n");
}
printf("\n");
}

感谢阅读我的问题:)

最佳答案

void matrixInit(Matrix* m, item* src){
for(int j = 0 ; j< m->row; j++){
for(int i = 0; i < m->col; j++){
m->var[j][i] = src[j*m->col + i]; // Thread occurred in herd

}
}
}

线程发生的原因是..我使用'j'而不是'i'..Lmao..

关于c - C 中的线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594303/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com