gpt4 book ai didi

c++ - 在函数中初始化二维数组,通过指针调用。获取段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:10:33 24 4
gpt4 key购买 nike

这个程序的目标是现在设置二维数组的每个数组变量,

char mass_data_shift[9][9]; 等于 'T' 。总体上应该等于 100 Ts。

这是通过使用此二维数组地址作为参数调用 void 函数来完成的。通过指针调用它,然后在循环中初始化。

在循环内部,二维数组应该设置为 T。

*mass_data[mass_data_counter][mass_data_counter_two] = 'T';

但是.....该程序的结果是:

  • (最常见)尝试初始化 *mass_data[4][2] 后出现段错误
  • (有时)程序成功(?)运行后出现段错误。
  • (有时)程序成功运行。

这意味着程序在某处正在越界写入。在使程序在没有段错误的情况下运行和/或修复其他错误方面的任何帮助将不胜感激。

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

void mass_data_define(char (*mass_data)[9][9]){

int mass_data_counter;
int mass_data_counter_two = 0;

for (mass_data_counter=0;mass_data_counter<9;mass_data_counter++){
do {
std::cout << "|Array #1 " << mass_data_counter
<< " ::: |Array #2 " << mass_data_counter_two
<< std::endl;

*mass_data[mass_data_counter][mass_data_counter_two] = 'T';

std::cout << *mass_data[mass_data_counter][mass_data_counter_two];

mass_data_counter_two++;
std::cout << "---------End of Counter 2 Init Code----------" << std::endl;
} while (mass_data_counter_two < 9);

mass_data_counter_two = 0;
}
}

int main()
{
char mass_data_shift[9][9];

mass_data_define(&mass_data_shift);

std::cout << "-END-" << std::endl;

return 0;
}

最终编辑:主要原因由下面的 szym 解决。抱歉,空格和丢失的 iostream 是我发帖时的格式问题。还按照下面的建议更改了循环以适应数组长度。

最佳答案

*mass_data[mass_data_counter][mass_data_counter_two] = 'T';

应该是

(*mass_data)[mass_data_counter][mass_data_counter_two] = 'T';

当然,这行也是如此:

std::cout << *mass_data[mass_data_counter][mass_data_counter_two]

但实际上,在 C/C++ 中,这种指针类型并不是通过引用传递数组所必需的。

您应该改为声明:

void mass_data_define(char mass_data[9][9]) {
// To read:
char z = mass_data[3][6];
// To write:
mass_data[2][1] = 'C';
}

// elsewhere
char my_mass_data[9][9];
mass_data_define(my_mass_data);

关于c++ - 在函数中初始化二维数组,通过指针调用。获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310483/

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