uye*_*tch 1 c segmentation-fault multidimensional-array
我一直在尝试执行以下代码.虽然任务很简单,但我遇到了分段错误.
代码片段的目的是创建一个最大行大小为4和列大小为33的多维数组.然后在创建之后,它应该将所有行的内容设置为0,后跟一个'\0'字符.然后最后,它应该显示输出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;
}
Run Code Online (Sandbox Code Playgroud)
你memset错了指针.
代替:
memset(arr,0,8);
Run Code Online (Sandbox Code Playgroud)
你要:
memset(arr[i],0,8);
Run Code Online (Sandbox Code Playgroud)
所以你离开了一个间接层.
正如评论中指出的,这里有一些优化:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(9 * sizeof(char));
memset(arr[i],0,9);
}
Run Code Online (Sandbox Code Playgroud)
要么
for ( i = 0; i < 4; i++) {
arr[i] = (char*) calloc(9, sizeof(char));
}
Run Code Online (Sandbox Code Playgroud)
请注意,char*C中不需要强制转换为C.
如果你想要角色'0'而不是空字符,那么你应该这样做:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(8 * sizeof(char));
memset(arr[i],'0',8);
arr[i][8] = '\0';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |