求助:c++出错~~ 0xC0000005: 写入位置 0xCDCDCDCD 时发生访问冲突

susan-wang 2015-11-20 05:35:58
想要对矩阵进行LU分解,出现报错,调试不知如何修改,请大神帮忙啊!!
// LU sequential.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int size;
double **l;
double **u;
double **mat;
clock_t t1,t2;
FILE *fp;


void decompose(double **m) {
t1 = clock();
int i = 0, j = 0, k = 0;
for (j = 0; j < size - 1; j++) {
for (i = j + 1; i < size; i++) {
double factor = m[i][j] / m[j][j];
for (k = 0; k < size; k++) {
u[i][k] = m[i][k] - (m[j][k] * factor);
}
l[i][j] = factor;
}

for (i = 0; i < size; i++) {
for (k = 0; k < size; k++) {
m[i][k] = u[i][k];
}
}

t2 = clock();
}
}

int generateMatrix(int size){
srand((unsigned) time(NULL));
mat =new double*[size * (sizeof *mat)];
u = new double*[size * (sizeof *u)];
l = new double*[size * (sizeof *l)];

int i = 0;
for (i = 0; i < size; i++) {
u[i] = new double[(sizeof *u[i]) * size];
l[i] = new double[(sizeof *l[i]) * size];
mat[i] = new double[(sizeof *mat[i]) * size];


int j = i;
for (j = i; j< size; j++) {
mat[i][j] = i + 1;
mat[j][i] = i + 1;
u[i][j] = mat[i][j];
u[j][i] = mat[j][i];
}
}
decompose(mat);

return 1;
}


int main(int argc, char * argv[])
{

size =100;
fopen_s(&fp,"output.txt", "a+");


int successFlag = 0;
if (generateMatrix(size) == 1)
{
successFlag = 1;
}
delete[]mat;
delete[]u;
delete[]l;
fprintf(fp, "%d ", size);
fprintf(fp, "%f\n", (double)(t2 - t1) / CLOCKS_PER_SEC);
fclose(fp);
return 0;
}

错误提示:

...全文
180 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightForProgrammer 2015-11-21
  • 打赏
  • 举报
回复
看调试信息。一层一层跟踪,找到出错的地方
paschen 版主 2015-11-21
  • 打赏
  • 举报
回复
点中断,通过调用堆栈定位出错的位置,然后分析导致的原因
爱的新风 2015-11-20
  • 打赏
  • 举报
回复
你这应该是访问了非法内存

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧