gpt4 book ai didi

C代码不会完成运行

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:19 26 4
gpt4 key购买 nike

我是 C 的新手,这是一个我正在尝试运行的测试程序。目的是将一个动态生成的矩阵中的字符放入另一个矩阵中。我得到的代码编译但从未完成运行。

当我注释掉底部的循环时,它会很好地执行 printf 语句,但是当我取消注释时,它只是继续运行而不打印。我虽然 C 工作顺序?如果循环中的某些东西坏了,为什么它会影响 printf 语句?

代码如下:

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


void main (void)
{
int n,m,i;
char **matrix = (char**) malloc(m * sizeof(char*));
for ( i = 0; i < m; i++ )
{
matrix[i] = (char*) malloc(n * sizeof(char));
}

char **oldMatrix = (char**) malloc(m * sizeof(char*));
for ( i = 0; i < m; i++ )
{
oldMatrix[i] = (char*) malloc(n * sizeof(char));
}

n=1;
m=2;
int indc;
matrix[n][m];
matrix[1][1]='1';
matrix[1][2]='2';
oldMatrix[1][2];
printf("%c %c",matrix[1][1],matrix[1][2]);

int r=0;

for (indc=0; indc<=1; indc++)
{
printf("4");
oldMatrix[r][indc]=matrix[r][indc];
}

}

最佳答案

这里有多个问题:

第一个问题:在为它们分配任何有效值之前,您同时使用了 mn(因此它们的初始值很可能很大).

第二个问题:你越界了:

n=1; 
m=2;

matrix[n][m]; // this line doesn't do anything
matrix[1][1]='1';
matrix[1][2]='2';

在 C(和 C++)中,数组索引从 0 开始,因此数组中的第一个元素为 0,最后一个元素为小于元素数量的元素(例如,带有 x 的数组元素基本上会从 array[0]array[x-1])。

如果您的数组有一个元素(matrix[n] 解析为 matrix[1]),您只能访问 matrix[0] matrix[1] 将越界(即未定义的行为;不要这样做!)。

第三个问题:分配指针的方式就是交换维度:matrix 将有 m 个元素,每个数组存储其中将包含 n 元素。您的其他代码期望完全相反。

关于C代码不会完成运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522517/

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