注册 登录
编程论坛 新人交流区

内存空间怎么申请??

godkid 发布于 2007-11-12 14:49, 692 次点击

帮我看道题好吗

先申请一个内存空间放下二维数组,然后找到只出现一次的行
代码如下,不知怎么修改
clude <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define N 7
#define M 3
int check(int *p,int *q,int length);
int main(void)
{
int i, j;
int *p=(int *)malloc(60);
p=&a;
int a[N][M]={{1,2,3},{2,5,6},{1,2,3},{3,6,9},{3,4,7},{1,2,3},{3,4,7}};
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
if (j==i) continue;
if (check(a[i], a[j], M)) goto NEXT;
}
printf("%3d:\t",i+1);
for (j=0; j<M; j++)
printf("%d ",a[i][j]);
printf("\n");
NEXT:;
}
return 0;
free(p);
}
int check(int *p, int *q, int length)
{
int i=0;
for (; i<length; i++)
if (p[i]!=q[i])
return 0;
return 1;
}

错在内存申请那块儿了,不知怎么改,请达人指点

5 回复
#2
小狐仙2007-11-12 15:00
不会,C语言?
#3
forrestx2007-11-12 15:22

先说几个看上去就不太符合写C语言习惯的地方:
先说这段代码
int *p=(int *)malloc(60);
p=&a;
int a[N][M]={{1,2,3},{2,5,6},{1,2,3},{3,6,9},{3,4,7},{1,2,3},{3,4,7}};
问题1:
变量a,应该是先定义,后使用。你这里正好写反了,不知道是发帖子弄错的,还是程序中就这样写的。

问题2:
malloc(60),一般不这样用.int类型的变量,在有些系统是占2个字节,有些系统是4个字节。
可以改成 (int *)malloc( n * sizeof(int)); n是指你要申请多少个int类型的变量。

#4
godkid2007-11-12 17:22
哦,不好意思,确实是粘贴的时候反了,
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define N 7
#define M 3
int check(int *p,int *q,int length);
int main(void)
{
int i, j;
int *p=(int *)malloc(10*sizeof(int));

int a[N][M]={{1,2,3},{2,5,6},{1,2,3},{3,6,9},{3,4,7},{1,2,3},{3,4,7}};
p=&a;
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
if (j==i) continue;
if (check(a[i], a[j], M)) goto NEXT;
}
printf("%3d:\t",i+1);
for (j=0; j<M; j++)
printf("%d ",a[i][j]);
printf("\n");
NEXT:;
}
return 0;
free(p);
}
int check(int *p, int *q, int length)
{
int i=0;
for (; i<length; i++)
if (p[i]!=q[i])
return 0;
return 1;
}
运行后总是提示、:warning C4047:“=”:“int *”differs in
levels of indirection from “int (*)[7][3]”
什么意思啊
#5
就是看不懂2007-11-12 18:14
最后就为你顶一下吧
#6
codelet2007-11-13 11:06
将p = &a

改为p = *a

意为 把a[0][0]的地址赋给了指针
1