【发布时间】:2012-01-10 00:25:11
【问题描述】:
我一直在尝试执行以下代码。虽然任务很简单,但我遇到了分段错误。
sn-p betlow 代码的目的是创建一个最大行大小为 4,列大小为 33 的多维数组。然后在创建后,它应该将所有行的内容设置为 0,然后是一个 @987654322 @ 特点。最后,它应该在stdout 上显示输出。
虽然我不是编程新手,但我不断收到类似的错误,所以如果可能的话,请解释一下我以后如何避免此类错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
int i,j,k,x,y;
char** arr;
arr = (char**) malloc(4 * sizeof(char*));
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(9 * sizeof(char));
memset(arr,0,8);
arr[i][8] = '\0';
}
for ( j = 0; j<4; j++) {
puts(arr[j]);
}
return 0;
}
【问题讨论】:
-
转换
malloc通常是错误的,因为它可能隐藏错误。 (Relevant reading) -
您在这里构建的东西通常被称为“不规则数组”或“锯齿数组”,它不同于您可以使用
char arr[33][4]声明的普通二维数组;不规则数组只是c中动态多维数组问题的几种解决方案之一。 -
您还需要 free() 使用 malloc() 分配的内存块。添加 for(j=0;j
标签: c multidimensional-array segmentation-fault