目录
1.C语言语法错误:引发了异常: 写入访问权限冲突,XXX 是 nullptr。
1.错误图示如上,错误描述:
在main函数中定义了b,在自定义的函数中直接使用b,会出现写入访问权限冲突。
原因是在main函数中没有分配*b的地址长度,*b为NULL。
2.解决方法如下
修改方法:在main函数中给*b分配地址长度:b== (int)malloc(number * sizeof(int))(注意free)
2.C 库函数 - malloc
描述
C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
声明
下面是 malloc() 函数的声明。
void *malloc(size_t size)
参数
size – 内存块的大小,以字节为单位。
返回值
该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
(来源于菜鸟教程)
3.HAUT OJ1160题
题目描述
找出一个2×3的整数矩阵中的最大值及其行下标和列下标,要求调用函数FindMax(int p[][3], int m, int n, int *pRow, int *pCol)实现,行下标和列下标在形参中以指针的形式返回。
void FindMax(int p[][3], int m, int n, int *pRow, int pCol){
//在mn矩阵p中查找最大值,将其行下标存入pRow所指内存单元,将其列下标存入pCol所指内存单元
}
输入
输入2行3列整数,共6个。
输出
输出3个整数,矩阵中的最大值及其行下标和列下标,数据之间用空格隔开。测试数据保证最大值唯一。
输入样例
100 3 6
0 87 65
输出样例
100 0 0
题解:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
void FindMax(int p[][3], int m, int n, int* pRow, int* pCol);
int main()
{
int a[2][3];
int* pRow=NULL;
pRow=(int*)malloc(4*sizeof(int)); int* pCol = NULL;
pCol = (int*)malloc(4 * sizeof(int));
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
FindMax(a, 2, 3, pRow, pCol);
printf(" %d %d", *pRow, *pCol);
return 0;
}
//int* FindMax(int p[][3], int m, int n, int* pRow, int* pCol)
//{
//
//}
void FindMax(int p[][3], int m, int n, int* pRow , int* pCol )
{
int max = p[0][0];
int i=0, j=0;
for ( i = 0; i < 2; i++)
{
for ( j = 0; j < 3; j++)
{
if (max <=p[i][j])
{
max = p[i][j];
*pRow = i;
*pCol = j;
}
}
}
printf("%d", max);
//在m*n矩阵p中查找最大值,将其行下标存入pRow所指内存单元,将其列下标存入pCol所指内存单元
}